0
我想实现lambda表达式的解析器。但我得到 “不匹配输入'预期 ')'” 的错误该输入:(\ XX X)(\ XX X),不知道为什么......ANTLR不匹配输入中的Lambda表达式
我有一个语法:
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
但我认为有一个WS解析的问题,不是吗?因为词法分析器不识别它,但是我定义了WS – Thomas
编号。错误消息显示实际输入字符流中的下一个内容,而不是下一个标记。如果有关于词法分析器在做什么的问题,[转储令牌流](http://stackoverflow.com/questions/29197727/antlr-4-5-parser-error-during-runtime/29198883#29198883)。空间令牌将被正确标记为隐藏。 – GRosenberg