|
Re: Semantic modification via IUnitOfWork brakes grammar [message #1052251 is a reply to message #1052193] |
Mon, 29 April 2013 21:24 |
Henrik Lindberg Messages: 2509 Registered: July 2009 |
Senior Member |
|
|
Since NL is optional (NL*) the serializer is not forced to output
anything and hence you do not get a NL.
When doing semantic changes, there is typically no existing nodes
containing the NL, so the formatter when formatting the added model
elements has no clue a NL is needed. (If there is a node model, then an
existing NL should be preserved if the formatting rules allow this).
I can think of a couple of ways to fix this:
- Make the serializer output a NL by default if there is no node model
- Make the serializer pick up information in an adapter and output what
is in the adapter (a more general solution).
- Assign the NL to a boolean - i.e. (endsWithNL ?= NL+)? (sets boolean
to true if there is a NL). Simply set it if you want one, and the
serializer should understand the need to output a NL when the endsWithNL
feature is true.
Hope that helps
- henrik
On 2013-29-04 21:22, Pawel Pogorzelski wrote:
> I have a grammar that defines hidden tokens as SPACE, TAB and
> SL_COMMENT. That means neither CR nor LF are hidden:
>
> grammar acl.Acl hidden(WS, SL_COMMENT)
> ...
> terminal WS:
> (' ' | '\t')+;
> terminal NL:
> ('\r'? '\n');
>
> Then I have RuleSection:
>
>
> RuleSection:
> header=RuleHeader
> rules+=Rule*;
> Rule:
> (group=GroupReference | user=User) ASSIGNMENT value=WORD? NL*;
>
>
> As you can see they are each in new line. Then, if I use IUnitOfWork
> these rules are not respected (inserted rule is before next section's
> header, in the same line). How do I perform semantic modification is
> cases like this?
>
> Thanks,
> Pawel
|
|
|
|
Powered by
FUDForum. Page generated in 0.04017 seconds