2011-07-17 4 views
4

parsing expression grammar (PEG) 내에 "순서없는 순서"를 표현하는 간단한 방법이 있습니까?표현 문법을 파싱하여 순서없는 구문 분석

Rule <- A B C 

과 같은 규칙은 A, B 및 C가 순서대로 일치해야합니다. 규칙은

Rule <- (A B C)/(B C A)/(C A B)/(A C B)/(C B A)/(B A C) 

이 허용하는 등 그들 (우리가 원하는 무엇을하는) 어떤 순서에 맞게 있지만, 순서에 더 많은 조건에 실제로 복잡하고 적용 할 수 있습니다.

은 유일한 해결책은

Rule <- (A/B/C){3} 

와 같은 구문 느슨한 규칙을 사용하여 의미 적으로 각 규칙은 한 번만 일치하는지 확인하는 것입니다?

XML을 구문 분석하기 위해 예를 들어 Relax NG Compact Syntax에 "unordered list" operator이 있다는 사실은 나에게 명백한 해결책이 없음을 암시합니다.

마지막 질문 : 그러한 연산자를 추가하면 PEG에 모호성이 있다고 생각합니까?

답변

1

문법 규칙은 선택한 구문 분석 엔진 (예 : PEG, LALR, LL (k), ...)에 관계없이 원하는 양식의 순서를 정확하게 표현합니다.

BNF 규칙을 사용하여 가능한 모든 시퀀스를 원한다는 것을 표현하는 유일한 방법은 제안한 커다란 규칙입니다.

표준 솔루션은 단순히 정의하는 것입니다 :

rule <- (A | B | C)* 

(또는 파서 생성기는 목록에 대한 수용 어떤 구문)와 의미 만 3 양식을 제공하고 그들이 고유한지 계산합니다.

종종 파서 생성기를 작성하는 사람들은 특수한 상황을 설명 할 수 있도록 특수한 "확장 된 BNF"표기법을 추가합니다. 예를 들어 {3}을 특수 구문으로 사용하면 파서 생성기가이 표기법을 허용하고 적절한 적용을 수행한다는 가정하에 "3 of"만을 원한다는 의미입니다. 자신의 상황을 설명 할 수있는 내선 표기 {고유}을 상상해보십시오. 나는 그 아이디어를 구현 한 파서 생성기를 본 적이 없다.

관련 문제