Я пишу интерпретатор, который использует код списка команд. У меня возникают некоторые проблемы, когда я пытаюсь написать грамматику для инструкций с метками.
Я бы хотел проанализировать этот блок кода:
LD 4
ST A
LD A
EQ 4
ST _AUX_1
(* IF *)
LDN _AUX_1
JMPC _label_2
(* THEN *)
LD B
EQ 3
ST _AUX_2
_label_2: (* ELSE *)
_label_1: (* END IF*)
LD TRUE
Как вы можете видеть, эти метки находятся в одной строке без инструкций, но язык, который я использую для синтаксического анализа, позволяет "метка + инструкция" в строке. Итак, существует три разных вида комбинаций инструкции и метки:
- Инструкция
- Метка:
- Метка: Инструкция
Я могу разобрать 1 и 2, но не могу разобрать все различные комбинации.
Это фрагмент моей грамматики ANTLR:
program_il : instruction* ;
instruction
: ID':' // label
| ID_INST operand
;
operando
: ID
| CTE_INT
| CTE_BOOL
;
Я пытался изменить грамматику на:
instruction : (ID':')? instruction? ;
Но у меня следующая ошибка:
As a result, alternative(s) 2 were disabled for that input
[14:43:49] error(201): Analizador.g:131:29: The following alternatives can never be matched: 2
Может ли кто-нибудь помочь мне с этой проблемой?
Заранее спасибо.