문제

나는 마당을 많이 사용하는 것을 즐기고있었습니다.

http://www.ootl.org/yard/

http://code.google.com/p/yardparser/

http://www.codeproject.com/kb/recipes/yard-tokenizer.aspx

완전히 기능적인 계산기를 구성 할 수있었습니다. PHP 파서를하기 위해 마당을 평가하고 있습니다. PEG 문법 및 파서 생성기의 한계에 대해 친절하게 조언하십시오. 매우 감사합니다!

도움이 되었습니까?

해결책

나는 페그와의 큰 "문제"는 문법이 근본적으로 다른 방식으로 작동 할 때 문법의 정상적인 분류에 맞지 않는다는 것입니다. 정상적인 문법은 생성 할 수있는 모든 가능한 문장 (프로그램)을 설명한다는 의미에서 "거꾸로"입니다. 페그는 구문 분석 방법을 설명합니다. 다른 쪽 끝에서 문제가 발생합니다.

내 견해로는 이것은 문제에 대해 생각하는보다 자연스러운 방법이며, 확실히 손으로 쓴 (재귀 적 사고) 파서에게는 다른 일을하지 않을 것입니다.

다른 팁

페그 문법의 주요 한계는 그들이 모호성을 전혀 다루지 않는다는 것입니다.

모호성을 다루는 것이 CFG (컨텍스트 프리 문법) 도구를 사용하는 것의 가장 실망스러운 부분 중 하나이기 때문에 이것은 또한 그들의 강점이기도합니다.

페그를 사용하면 모호하게 일치하지만 원하지 않는 다른 규칙에 맞추려는 규칙을 명시하여 모호성을 명시 적으로 처리합니다.

문제는 언어 나 문법 및 페그 생성기의 일부 또는 모호성에 대해 항상 알지 못하는 것입니다. 그것들은 규칙을 올바른 방법으로 다루기 위해 규칙을 설계하고 주문합니다.

YACC 및 Bison과 같은 CFG 파서 생성기는 문법을 분석하고 모든 모호성을보고합니다. 불행히도 그들은 종종 그들을 이해하기 어려운 꽤 비밀스러운 방식으로보고합니다. 물론 문법을 다루기 위해 문법을 고치는 것은 종종 어렵습니다. 그러나 적어도 당신은 그들이 존재한다는 것을 알게 될 것입니다.

페그 문법을 사용하면 개념적 문법의 모호성을 행복하게 무지 할 수 있습니다. 일단 페그를 만들면 더 이상 모호성이 없기 때문에 일치하는 규칙이 있고 조용히 불가능한 규칙이있을 수 있습니다. 상위. 이들은 테스트에 나타나지 않지만 출시 후 나타날 수 있습니다.

CFG 문법을 사용하면 개발 중에 모호성을 처리해야하지만 쉽지는 않습니다.


내가 명확하지 않은 경우, 여기에 Joshua Haberman의 6 살짜리 토론이 람다 궁극 언어 프로그래밍 블로그 : 페그와 Packrat 구문 분석은 해답이 아닙니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top