3

GLR 파서가 두 개 이상의 다른 방법으로 같은 비 - 터미널로 일부 텍스트를 줄이면 구문 분석 하위 트리가 병합됩니다. Rekers는이를 위해 '심볼 노드'를 사용합니다.GLR의 모호하지 않은 터미널 non-terminal

나는 비 터미널이 아닌 각각의 터미널을 병합 할 수 있습니다. 비 터미널이 병합하지 않는 것을 미리 알면 파스 트리 구축이 크게 단순 해집니다.

예를 들어 Elkhound Technical Report에서는 작성자가 GLR 구문 분석기 용 C++ 문법을 구현했습니다. 그는 그것을 설명

문법이 현재 가지고 37 이동/줄일 충돌, 47/감소 갈등과 8 모호한 비 터미널을 줄일 수 있습니다.

특정 CFG에 대해 모호하지 않은 부분과 명확하지 않은 부분을 어떻게 구분할 수 있습니까? 이것에 대해 어디에서 읽을 수 있습니까?

답변

0

어떤 비 터미널이 모호성을 일으킬 수 있는지 아는 것이 실제로 파스 트리 생성을 단순화하는 방법입니까?

문법에 그런 비단 말자가 없으면 심볼 노드 구성 및 하위 트리 공유 도구를 생략 할 수 있습니다. 그렇게 많은 코드가 아니기 때문에이 승리는 아주 사소한 것입니다.

그러나 비 터미널이 모호 할 수있는 경우 기계가 필요합니다. 모든 모호성에 걸쳐 해당 기계를 공유하는 것은 매우 쉽습니다 (GLR 파서를 작성했습니다). 그럼 정확히 무엇을 얻습니까?

마지막으로, 문법이 모호한 지 결정할 수 없습니다. 비 터미널은 서브 문법을 나타 내기 때문에 특정 비 터미널이 모호한지를 결정할 수는 없습니다. 많은 특별한 경우에이 작업을 수행 할 수 있습니다. (내 GLR 파서 생성기는 기본적으로 비 터미널의 가능한 확장을 열거하여 기본적으로 일부 모호함을 자동으로 찾습니다.