Я пишу интерпретатор, который использует код списка инструкций. У меня возникают проблемы, когда я пытаюсь написать грамматику для инструкций с метками.ANTLR Grammar - Разборные ярлыки и инструкции
Я хотел бы парсер этого блока коды:
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
Как вы можете видеть эти ярлыки находятся в одной строке без инструкции, но язык I'have для синтаксического анализатора позволяет «ярлык + инструкцию» в линии. Итак, есть три вида Differents комбинаций инструкции и этикетки:
- Инструкция
- Label:
- Label: Инструкция
Я разбором 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
Может ли кто-нибудь помочь мне с этой проблемой? Спасибо заранее.
+1, но , хотя я не знаком с ANTLR, я думаю, что было бы чище делать «инструкцию: (ID ':')? ID_INST operand;». –
@ 500-InternalServerError, увы, это не работает с ANTLR :). С анализаторами LL часто бывает хорошей идеей: * не * иметь необязательные правила с левой стороны. –
Ой! - задается вопросом, почему нет. Ну что ж. –