【发布时间】:2012-02-13 13:50:27
【问题描述】:
我正在编写一个使用指令列表代码的解释器。当我尝试为带有标签的指令编写语法时遇到了一些问题。
我想解析这个代码块:
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
有人可以帮我解决这个问题吗? 提前谢谢你。
【问题讨论】: