현대 프로그래밍 언어에서 "Regex"가 실제로 "컨텍스트 민감한 문법"입니까?
-
03-07-2019 - |
문제
수년에 걸쳐, "Regex"패턴 매칭은 내가 궁금해하는 시점에 점점 더 강력 해지고 있습니다. 실제로 상황에 감지하는 문법 일치입니까? 컨텍스트가없는 문법 일치의 변형/확장입니까? 지금은 어디에 있습니까? 왜 우리는 왜 오래되고 제한적인 "정규 표현"대신에 그것을 부르지 않습니까?
다른 팁
내가보기 엔:
- 일반 언어 :
- 상태 기계와 일치합니다. 일치 할 문법의 현재 "위치"를 나타내는 데 하나의 변수 만 사용될 수 있습니다. 재귀를 구현할 수 없습니다.
- 상황이없는 언어 :
- 스택 머신과 일치합니다. 문법의 현재 "위치"는 하나 또는 다른 형태의 스택으로 표시됩니다. 전에 일어난 일을 "기억할 수 없습니다
- 상황에 관계없이 언어 :
- 대부분의 프로그래밍 언어
모두대부분의 인간 언어
나는 당신이 파서가 이미 겪은 무언가와 일치 할 수있는 정규 표현 파서에 대해 알고 있습니다.
그럼에도 불구하고 정규 표현 파서는 정교하지만 정교 할 수 있지만, 재귀적인 규칙 적용을 허용하지 않으며, 이는 상황이없는 문법에 대한 명확한 요구 사항입니다.
용어 성과선, 내 생각에, 대부분은 통사론 일반 문법 (별과 물음표)을 표현하는 데 사용됩니다.
현대의 정규 표현식 구현 기능이 있습니다. 고전적인 정규 표현 정의.
예를 들어 Microsoft의 .NET 밸런싱 그룹 (?<
name1
-
name2
> … )
:
^(?:0(?<L>)|1(?<-L>))*(?(L)(?!))$
이것 하다 언어와 일치합니다 엘₀₁ = {ε, 01, 0011, 000111,…}. 그러나이 언어는 정기적이지 않습니다 레마를 펌핑합니다.
제휴하지 않습니다 StackOverflow