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

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 ;

我想为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

对alt3
->alt2
\x.
->alt1
x
匹配
(\x.x
)的
lambda\u表达式的递归,让解析器想用
完成alt3的匹配。

将备降2改为

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

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

但我认为WS-parsing存在问题,不是吗?因为lexer无法识别它,但我定义了WSNo。错误消息显示实际输入字符流中的下一个标记,而不是下一个标记。如果有关于lexer正在执行。空间令牌将正确标记为隐藏。