2015-06-23 3 views
0

В моей грамматике я хочу, чтобы одна команда в каждой строке (я не хочу «;» или «:», чтобы прервать мои команды). Но когда я использую ('\ r'? '\ N'), чтобы обеспечить одну команду на строку, она создает дополнительную строку. например, он производит:Разрешить только одну команду perline в DSL

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

Думаю, вы не должны моделировать новые строки в грамматике, так как это не влияет на семантику! Но в случае довольно печатной строки разрыв строки имеет смысл после каждого элемента. Ваш фрагмент грамматики должен выглядеть следующим образом:

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) 
    } 
} 

Everytime вы вызываете автоформат в Eclipse (Ctrl + Shift + F) ваш код будет довольно распечатана в редакторе.

+0

Thats именно то, что я искал. спасибо. – Mohsin

Смежные вопросы