1
간단한 람다 계산법 문법 (아래 참조)을 작성하려고합니다. 내가 겪고있는 문제는 함수 응용 프로그램이 왼쪽 연관 대신 오른쪽 연관으로 취급되는 것입니다. "f 1 2"는 ((f 1) 2) 대신 (f (1 2))로 구문 분석됩니다. ANTLR에는 토큰에 대한 assoc 옵션이 있지만 함수 적용을위한 연산자가 없기 때문에 ANTLR이 여기서 도움이되는 방법을 알지 못합니다. 누구나 솔루션을 볼 수 있습니까?함수 적용을위한 Antlr4 문법
LAMBDA : '\\';
DOT : '.';
OPEN_PAREN : '(';
CLOSE_PAREN : ')';
fragment ID_START : [A-Za-z+\-*/_];
fragment ID_BODY : ID_START | DIGIT;
fragment DIGIT : [0-9];
ID : ID_START ID_BODY*;
NUMBER : DIGIT+ (DOT DIGIT+)?;
WS : [ \t\r\n]+ -> skip;
parse : expr EOF;
expr : variable #VariableExpr
| number #ConstantExpr
| function_def #FunctionDefinition
| expr expr #FunctionApplication
| OPEN_PAREN expr CLOSE_PAREN #ParenExpr
;
function_def : LAMBDA ID DOT expr;
number : NUMBER;
variable : ID;
고마워요!
이 문제는 v4.2.2에서도 여전히 발생합니다. 다른 문제가 있습니까? –
나는 expr expr이 문제라고 생각한다. 운영자가 없습니다. 어쩌면 문제가 생길 수 있습니다. –