현재 언어를 구문 분석하는 데 happy
을 사용하고 있지만 LALR 파서 인 경우를 제외하고는 파서가 적절하지 않다고 생각합니다. 문법에서 발췌 한 내용은 다음과 같습니다.괄호와 다른 유형의 표현을 사용하여 구문 분석
ArithExpr -> ArithExpr + ArithExpr
ArithExpr -> (ArithExpr)
ArithExpr -> ...
BoolExpr -> ArithExpr == ArithExpr
BoolExpr -> (BoolExpr)
BoolExpr -> ...
문제는 감소 감소 충돌이 발생한다는 것입니다. 나는 다음과 같은 구문 분석 할 때 문제가 발생 생각 :
((2 + 3) == (4 + 5))
이 표현을 구문 분석하는 하나의 방법이있다, 그러나 문제는 내가 심지어 파서가 일부 문제가 시작하는 첫 번째 괄호에서 생각입니다. 필자가 생각하는 이유는 파서가 ArithExpr
또는 BoolExpr
을 앞으로 마주 치는지 여부를 알지 못하기 때문이며, lookahead의 하나의 토큰 만 있기 때문에 잘못된 선택 일 수 있습니다.
어쨌든이 언어를 받아들이도록 문법을 다시 작성 하시겠습니까? 아니면 단지 과 BoolExpr
을 하나의 유니폼 Expr
처럼 구문 분석하고 형식 검사 중에 실제 형식을 처리해야합니까?