在DSL中只允许一个命令perline

时间:2015-06-23 10:11:11

标签: dsl xtext

在我的语法中,我希望每行最多一个命令(我不希望&#39 ;;'或':'终止我的命令)。 但是当我使用(' \ 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
;
.
.
.

我不确定如何实现这一目标:请帮忙。谢谢

1 个答案:

答案 0 :(得分:1)

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

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

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

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

每次触发Eclipse的autoformat(ctrl + shift + F)时,您的代码都会在编辑器中打印出来。