ANTLR不匹配输入中的Lambda表达式
我想为lambda表达式实现一个解析器。但是我得到了“不匹配的输入”“预期”)”,该输入的错误:(\x.x)(\x.x),不知道为什么 我有一个语法:ANTLR不匹配输入中的Lambda表达式,lambda,antlr,antlr4,lambda-calculus,Lambda,Antlr,Antlr4,Lambda Calculus,我想为lambda表达式实现一个解析器。但是我得到了“不匹配的输入”“预期”)”,该输入的错误:(\x.x)(\x.x),不知道为什么 我有一个语法: grammar Lambda; lambda_expression : VARIABLE | '\\' VARIABLE '.' lambda_expression | ('(' lambda_expression ')')+ | EOF ;
grammar Lambda;
lambda_expression : VARIABLE
| '\\' VARIABLE '.' lambda_expression
| ('(' lambda_expression ')')+
| EOF
;
VARIABLE : 'x' | 'y' | 'z' | 'v' | 'w'
;
WS : (' ')+ -> channel(HIDDEN);
这是我的主要课程:
public static void main(String[] args) throws IOException {
// TODO code application logic here
ANTLRInputStream input = new ANTLRInputStream("(\\x.x x) (\\x.x x)");
LambdaLexer lex = new LambdaLexer(input) ;
CommonTokenStream tokens = new CommonTokenStream(lex);
LambdaParser parser = new LambdaParser(tokens);
parser.lambda_expression();
parser.setBuildParseTree(true);
LambdaParser.Lambda_expressionContext tree = parser.lambda_expression();
System.out.println(tree.toStringTree(parser));
}
我正在使用antlr4-4.1-complete.jar对alt3
(
->alt2\x.
->alt1x
匹配(\x.x
)的lambda\u表达式的递归,让解析器想用完成alt3的匹配。
将备降2改为
| '\\' VARIABLE ( '.' lambda_expression )+ lambda_expression
可能是解决方案,这取决于它是否实际反映了允许的lambda语法。但我认为WS-parsing存在问题,不是吗?因为lexer无法识别它,但我定义了WSNo。错误消息显示实际输入字符流中的下一个标记,而不是下一个标记。如果有关于lexer正在执行。空间令牌将正确标记为隐藏。