Я хочу реализовать парсер для лямбда-выражений. Но я получаю «несоответствующие вход„“, ожидающей„)“» ошибка для этого входа: (\ хх х) (\ хх х), не знаю, почему ...Lambda выражение в ANTLR несоответствующий ввод
У меня есть грамматики:
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, не так ли? потому что lexer не распознает его, однако я определил WS – Thomas
№. Сообщение об ошибке показывает, что будет дальше в потоке фактических входных символов, а не следующем токене. Если возникает вопрос о том, что делает lexer, [dump поток токенов] (http://stackoverflow.com/questions/29197727/antlr-4-5-parser-error-during-runtime/29198883#29198883). Значок пространства будет правильно помечен как скрытый. – GRosenberg