EBNF:汇编代码生产中的前缀和类似后缀的运算符



我正在尝试在 EBNF 中写下 6809 程序集来编写树状解析器。

我被困在某个特定的作品上。在 6809 程序集中,可以使用寄存器作为操作数,并另外对其进行去运算或递增:

LDA 0,X+     ; loads A from X then bumps X by 1
LDD ,Y++     ; loads D from Y then bumps Y by 2
LDA 0,-U     ; decrements U by 1 then loads A from address in U
LDU ,--S     ; decrements S by 2 then loads U from address in S

注意第二行代码中"缺少"的第一个操作数。以下是我写的作品:

instruction = opcode, [operand], ["," , register_exp];
...
register_exp = [{operator}], register | register, [{operator}];
register = "X" | "Y" | "U" | etc. ;
operator = "+" | "-";

问题是register_exp = ....我觉得可以有一种更优雅的方式来定义这部作品。另外,如果只给register_exp一个寄存器会发生什么?

您可能需要

register_exp = [{operator}], register | register, [{operator}] | register;

以允许不带运算符的寄存器名称。为什么你觉得它不那么优雅?相当具有描述性。

最新更新