У меня есть простая лексер/грамматика, над которой я работал, и мне сложно понять стандартную операционную процедуру для сопоставления форматированных переменных. Я пытаюсь соответствовать следующим:Захват форматированных объявлений переменных в ANTLR
- Имя переменной может быть не менее 1 символа. Если это один символ, это должна быть прописная или строчная буква.
- Если оно больше 1 символа, оно должно начинаться с буквы любого случая, а затем следует любое количество символов, включая цифры, знак подчеркивания и знак доллара.
Я переписан несколько раз, во многих разновидностях, и я всегда получаю следующее сообщение об ошибке:
Decision can match input such as "SINGLELETTER" using multiple alternatives: 1, 2
As a result, alternative(s) 2 were disabled for that input"
бы реально оценить некоторое представление. Я понимаю, что в моей грамматике есть некоторая двусмысленность, но я немного смущен, почему несколько альтернатив могут быть сопоставлены, когда мы вводим исходный цикл соответствия. Спасибо!
variablename
: (SINGLELETTER)
| (SINGLELETTER|UNDERSCORE)(SINGLELETTER|UNDERSCORE | DOLLAR | NUMBER)*;
SINGLELETTER : ('a'..'z' | 'A'..'Z');
fragment LOWERCASE : 'a'..'z';
fragment UNDERSCORE : '_';
fragment DOLLAR : '$';
fragment NUMBER : '0'..'9';
Благодарим вас за ответ. Однако эти два правила, похоже, соответствуют тому же самому, что я написал, кроме одного - лексер, а одно - правило парсера. «Решение может соответствовать вводу, например« {'A' .. 'Z', 'a' .. 'z'} ", используя несколько альтернатив: 1, 2 В результате альтернативы (2) были отключены для этого вход» –