GLR 방법으로 shift \ reduce 충돌을 해결하려면 어떻게해야합니까?
구문 분석기가 오른쪽 시프트 연산자와 자체에 대한 템플릿 인수의 두 개의 닫는 꺾쇠 괄호 사이의 충돌을 해결한다고 가정합니다. 나는 렉서가 두 개의 연속적인 ">"기호를 하나의 ">>"토큰으로 병합하지 않고 별도의 토큰으로 전달하도록 만듭니다. 그런 다음이 규칙을 문법에 적용합니다.들소, C + + GLR 구문 분석 : 어떻게 교대 충돌을 강제로?
operator_name:
"operator" ">"
| "operator" ">" ">"
;
나는 이것을 교대 \ 축소 충돌로 만들고 싶습니다. 왼쪽 연관성이있는 ">"에 대한 토큰 선언이있는 경우 충돌이 발생하지 않습니다. 따라서 토큰 우선 순위 \ 조합 성 선언을 제거해야하지만, 충돌하는 각 규칙에 대한 문맥 우선 순위를 지정하여 수동으로 해결하고 싶지 않은 다른 많은 충돌이 발생합니다. 그래서, 토큰을 선언하는 동안 shift \ reduce 충돌을 강제하는 방법이 있습니까?
">"은 시프트 연산자 또는 템플릿 닫기 태그 토큰과는 별도의 토큰으로 간주됩니다."-", 음수 부호 또는 빼기 연산자에 대해서도 마찬가지입니다. – umlcat
예, C#과 Java에서이 기술을 사용했음을 기억합니다.하지만이 파서는 ANTLR 기반이었으며 일부 해킹이 없어도 더 간단했습니다. – slavasav