在 DSL 中只允许一个命令 perline

Allowing only one command perline in DSL

在我的语法中,我希望每行最多一个命令(我不想用“;”或“:”来终止我的命令)。 但是当我使用 ('\r'?'\n') 来确保每行一个命令时,它会产生一个额外的行间隙。例如它产生:

read Ram 03DF

write Ram 05FF

JMP Add 056A

CHK Reg 08AA

这不是必需的。预期应该没有额外的换行。例如:

read Ram 03DF
write Ram 05FF
JMP Add 056A
CHK Reg 08AA

我所做的概述是

Model:
 (content += Elements ('\r'?'\n') )+
;
Elements:
Data | Path | Ram | Address
;
.
.
.

我不确定我该如何实现:请帮助。谢谢

我认为你不应该在语法中建模新行,因为它对语义没有影响!但是在漂亮打印的情况下,在每个元素之后换行是有意义的。您的语法片段应如下所示:

Model:
    content+=Element+;
Element:
    Data | Path | Ram | Address;
...

您要查找的是 org.your.dsl.formatting.YourDslFormatter class。它提供了一个方法存根来实现漂亮打印的格式化模式。在那里您定义在每个 Element 之后插入一个换行符。尝试从 s.th 开始。像这样:

class YourDslFormatter {
    @Inject YourDslGrammarAccess g
    override protected void configureFormatting(FormattingConfig c) {
        c.setLinewrap(1).after(g.elementRule)
    }
}

每次您触发 Eclipse 的自动套用格式 (ctrl + shift + F) 时,您的代码将在编辑器中完美打印。