在 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) 时,您的代码将在编辑器中完美打印。
在我的语法中,我希望每行最多一个命令(我不想用“;”或“:”来终止我的命令)。 但是当我使用 ('\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) 时,您的代码将在编辑器中完美打印。