지난 수년 동안 "정규식"패턴 매칭은 점점 더 강력 해졌습니다. 문맥에 맞는 문법 일치입니까? 문맥 - 자유 문법 일치의 변형/확장인가? 지금 당장은 어디에 있고 왜 구식의 제한적인 "정규 표현식"대신에 그것을 그렇게 부르지 않는가?현대 프로그래밍 언어의 "정규식"은 실제로 "상황에 맞는 문법"입니까?
7
A
답변
9
특히 괄호 캡처에 대한 역 참조는 정규식, 문맥 자유형 또는 상황 별 문법보다 더 복잡한 표현식을 만듭니다. 이름은 단순히 역사적으로 (많은 단어로) 재배됩니다. 위키피디아의 this section과 펄의 explanation with an example도 참조하십시오.
3
내가보기 :
- 정규 언어 :
- 상태 머신에 의해 일치. 하나 개의 변수는 일치하는 문법의 현재 "위치"를 나타내는 데 사용할 수 있습니다 : 재귀는 구현 될 수
- 문맥 자유 언어 : 스택 기계에 의해 일치
- . 문법의 현재 "위치"는 하나 또는 다른 형식의 스택으로 표현됩니다. 모든 대부분의 인간의 언어
나는 일반의
알고
- 대부분의 프로그래밍 언어
-
:
여전히 정교한 문법 파서는 규칙을 재귀 적으로 적용 할 수 없으므로 문맥 자유 문법에 대한 확실한 요구 사항입니다.
용어 정규식은, 내 의견으로는, 주로 그 일반 문법 (별과 물음표)를 표현하는 데 사용되는 구문을 의미합니다.
3
classic regular expression definition의 규칙을 위반하는 최신 정규 표현식 구현의 기능이 있습니다. 예를 들어 Microsoft’s .NET Balancing Group(?<
name1
-
name2
> …)
:
^(?:0(?<L>)|1(?<-L>))*(?(L)(?!))$
가 수행이 언어 L 일치 ₀₁ = {ε , 01, 0011, 000,111, ...}. 그러나이 언어는 Pumping Lemma에 따르면 규칙적이지 않습니다.
+0
그것이 고전적인 정규 표현식을 넘어서지만, 나는 훨씬 더 궁금해. 위의 Fabian의 링크는 흥미 롭습니다. – notnot
'정규 언어'와 '정규 표현식'의 차이점을 설명해 주시겠습니까? –
CSG보다 훨씬 강력합니까? 예를 들어 주시겠습니까? – notnot
일반 언어는 일반 문법 (http://en.wikipedia.org/wiki/Regular_grammar 참조)으로 설명 할 수 있지만 정규 표현은 덜 제한적이어서 처리하기가 더 복잡한 패턴 일치 언어입니다. –