Соответствие аналогичным терминам в ANTLR без учета разницы
В рамках задачи nand2tetris я пытаюсь написать парсер с использованием ANTLR для генерации машинного кода, уже реализовав его с помощью регулярных выражений.
Тем не менее, я изо всех сил пытаюсь понять, как эффективно использовать ANTLR. Подмножество проблемы ниже.
(Некоторые) Действительные инструкции
M=D
D=M
M=D+1
D;JMP
0;JMP
A (частичное) регулярное выражение
(?<assignment>(?<destination>[ADM])=)?(?<computation>[ADM+10])(?<condition>;(?<jump>JMP))?
(Частичная) грамматика
command
: assignment '=' computation
| computation ';' condition
| assignment '=' computation ';' condition
;
assignment
: ASSIGNMENT
;
computation
: OPERATION
;
condition
: CONDITION
;
ASSIGNMENT
: DESTINATION
;
CONDITION
: JUMP
;
DESTINATION
: 'A'
| 'D'
| ...etc
;
OPERATION
: 'A'
| 'D'
| 'A+D'
| ... etc
;
JUMP
: JMP
| JLE
| etc...
;
Теперь, как вы можете видеть, лексер будет смешиваться между тем, что является вычислением, и тем, что является присваиванием, так как оба могут быть 'A'...
Однако, если я изменю НАЗНАЧЕНИЕ на
ASSIGNMENT
: DESTINATION '='
;
и команда
command
: assignment computation
| etc...
затем назначение поднимает знак равенства.
Итак, я пытаюсь сопоставить до двух токенов (FOO и FOO=) в разных контекстах, но меня не интересует =, только FOO.
Я лаю не на том дереве полностью с нынешним подходом?