В проекте я работаю в ANTLR (v4), у меня есть правило, как это:ANTLR (v4) Правило не прилагая
Equal : '::='
Identifier
: ('A'..'Z' | '_' | '0'..'9') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*
;
Constant
: Identifier Equal Expression
;
И я даю это код, как: X ::= 1
, и, вместо того, чтобы быть «константой», он выдается как три отдельных токена: Идентификатор, Равный и Идентификатор. Я не могу понять, что я делаю неправильно. Возможно, мне стоит вернуться к использованию библиотеки Parsec от Haskell. (Причина, по которой я прекратил использовать, это длинная история.)
... или вы можете перейти к комбайну синтаксического анализатора Scala :) –
Вы определяете 'Constant' как токен лексера. Чаще всего это определить как правило парсера (записать его в нижний регистр 'константа'). Кроме того, было бы интересно, как определяется выражение «Выражение»? И есть ли правило lexer для пробелов? – CoronA