ANTLR输入中的Lambda表达式不匹配



我想实现一个lambda表达式解析器。但我得到"输入不匹配"期待")"错误的输入:(x。X X) ( X。我不知道为什么……

我有一个语法:

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

lambda_expression上递归的alt3 ( -> alt2 x. -> alt1 x匹配(x.x,让解析器想要完成alt3与)的匹配。

将alt2改为

    | '\' VARIABLE ( '.' lambda_expression )+ lambda_expression

可能是解决方案,这取决于它是否实际反映了您允许的lambda语法。

相关内容

  • 没有找到相关文章

最新更新