2014-12-27 2 views
-2

은 오토마타 이론에서 가장 CS 교과서는 알파벳 Σ =로 정규 표현식을 다룰 것으로 보인다 {0, 1} 또는 Σ = {A, B}을.정규식 파서

Automata 클래스의 많은 학생들이 RegEx를 작성하는 데 어려움을 겪었습니다. 다음 예제와 같은 것을 허용하는 파서가 있습니까? Perl RegEx와 비슷한 문법은 유용하지 않다.

일부 예 :이 클래스 여러 교재에서 사용 된 구문

(0+1)*     # All words in the language 
(0+1)((0+1)(0+1))*  # All words of odd length 
0(0+1)*1    # Words starting with 0 and ending with 1 
0*+0*10*+0*10*10*  # Has at most two 1's 
(0+10)(0+1)*(1+10)  # Begins with 0 or 10 and ends with 1 or 10 
(1+011)*    # Every 0 followed by two 1's 

하는 *은 0+ 배 일치 나타내고, +는 OR를 나타낸다.

이 작업을 수행 할 수있는 무언가가 있습니까? 아니면 내 파서를 만들어야합니까?

+0

정규식 구문은 EBNR에 더 가깝습니다. – ikegami

+0

EBNR? 이것에 대한 구글의 검색은 아무런 도움이되지 않으며 나는 들어 본 적이 없다. –

+0

EBNF입니다. 향상된 BNF – ikegami

답변

0

그것은 표준 정규 표현식에서 서로 다른 보이지 않는 ... 당신이 만드는해야 할 것이다 유일한 변화는 | (변경 (0|1)-(0+1))와 +를 교환하는 것입니다. 그 외에도 ^을 붙이고 접미사 $을 붙이거나 적절한 옵션을 설정하여 결과 정규 표현식을 전체 행과 일치시켜야합니다.

표준 정규식 파서를 감싸는 데 몇 줄을 초과하면 안됩니다.

+0

이것에 대해 살펴 보겠습니다. 이 파서가 지원해야하는 것의 몇 가지 예를 추가했습니다.이 파서는 원래 생각했던 것보다 더 복잡 할 수도 있지만,이 주제에 대해서는 다소 우둔합니다. 감사! –

+0

예제 중 표준 파서를 사용하는 기능이 변경되지 않았습니다. 나는'+'의 정의를 조정하기 위해 나의 대답을 업데이트했다. – Mitch