Я пытаюсь разобрать следующую грамматику.
let_expr : LET iden integer;
CHAR : ('a' .. 'z') | ('A' .. 'Z');
DIGIT : ('0' .. '9');
LET : 'let'
integer : DIGIT+;
iden : CHAR (CHAR|DIGIT)*;
WS : (' ' | '\n' | '\t' | '\r')+ -> skip;
В противном случае важно игнорирование пробелов, так как это небольшой фрагмент большой грамматики, а перенос маркеров пробелов повсюду чрезвычайно громоздок.Однако, когда анализатор пытается проанализировать оператор, такой как let ab 10
, он, естественно, игнорирует все пробелы между ab
и 10
и анализирует ab1
как идентификатор, а последний 0
- как целое число.Очевидно, что намерение состоит в том, что ab
является идентификатором, а 10
является целым числом.Я видел некоторые решения, основанные на Java, но как мне решить эту проблему в Python3?