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

时间:2015-10-07 19:39:05

标签: lambda antlr antlr4 lambda-calculus

我想为lambda表达式实现一个解析器。但我得到“不匹配的输入''期待')'”输入的错误:(\ x.x 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

1 个答案:

答案 0 :(得分:0)

alt lambda_expression (的递归 - > alt2 \x. - > alt1 x匹配(\x.x,让解析器希望完成alt3与)的匹配。

将alt2更改为

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

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