PEG 문법의 주된 한계는 모호성을 전혀 다루지 않는다는 것입니다.
모호성을 다루는 것이 CFG (문맥 자유 문법) 도구를 사용하는 데있어서 가장 실망스러운 부분 중 하나이기 때문에 이것은 또한 장점이기도합니다.
PEG를 사용하면 모호하게 일치하지만 원하지 않는 다른 규칙보다 먼저 일치시킬 규칙을 순서대로 지정하여 모호성을 명시 적으로 처리합니다.
문제는 언어 나 문법 및 PEG 생성기의 모호성에 대해 항상 알지 못하는 것입니다. 적어도 내가 시도한 것들은 모호성에 대한 문법을 분석하지 않습니다. 그 (것)들을 찾아 내기 위하여 그 후에 그 (것)들을 취급하기 위하여 당신의 규칙을 디자인하고 주문할 것을 돕기 위하여.
yacc 및 bison과 같은 CFG 파서 생성기는 문법을 분석하고 모든 모호성을보고합니다. 불행하게도 그들은 때로는 이해하기 어렵게 만들 수있는 매우 신비한 방식으로 그들을보고합니다. 물론 문법을 고치는 것이 종종 어렵습니다. 그러나 적어도 당신은 그들이 존재한다는 것을 알게 될 것입니다.
PEG 문법을 사용하면 개념 문법의 애매 모호함을 알지 못할 수 있습니다. 일단 PEG를 만들면 모호함이 없으므로 일치 규칙과 일치 할 수있는 조용히 도달 할 수없는 규칙이 생길 수 있습니다. 우선 순위가 더 높은 경우 테스트 결과에 표시되지 않을 수도 있지만 출시 후 표시 될 수 있습니다.
CFG 문법을 사용하면 개발 중 모호성을 처리해야하지만 쉽지는 않을 것입니다. PEGs and Packrat Parsing are not the answer : 나는 그것을 명확하게하고 있지 않다 경우에
, 여기에
람다 궁극적 인 프로그래밍 언어 블로그에 여섯 살짜리 여호수아 Haberman에 의해 논의 끝났습니다.
PHP를 구문 분석하는 경우 [phc] (http://phpcompiler.org)를 사용하는 것이 좋습니다. –