|
|
|
Re: two grammar rules should be independent [message #872691 is a reply to message #872528] |
Wed, 16 May 2012 15:51 |
Henrik Lindberg Messages: 2509 Registered: July 2009 |
Senior Member |
|
|
On 2012-16-05 11:20, Mikael Karpberg wrote:
> Hello, Tim!
>
> What's happening is that all explicit strings you put into your grammar
> turn into keywords (including the 'e', if you implement doubles with
> scientific notation the way it's recommended, i.e. via datatype rules,
> so I made mine a terminal anyway).
>
> I have the same problem with some of my grammar... I want to have a an
> identifier at a place in the grammar and then continue parsing down one
> path only if that identifier is a certain string, without it turning
> into a keyword, since the keyword can then not be used as an identifier
> in other places in the grammar. The reason in my cases is that I'm
> implementing an already designed DSL that's parsed in a more flexible
> framework elsewhere.
>
The standard solution would be to have a MyID that is ID | your keywords
and use that instead of ID.
MyID : ID | ExKeyword ;
You then need to take care of coloring of the ExKeywords when they are
used as identifiers.
> Anyway, I hope that at least helps you figure out what's going wrong.
> I'm afraid I don't have a solution for you, except this:
>
>
> action:
> typ=Event |
> typ=Ex
> ;
>
> ExKeyword:
> key=('okay' | 'OKAY' | 'ERROR' | 'CRITERR' | 'TIMEOUT' | 'ABORT' |
> 'TRANS');
>
> Event hidden(UTS_COMMENT):
> type='event' WS ('-d'|'-e') WS (ID | ExKeyword)+ WS*
> ;
>
Depending on the rest of the grammar the '-d' and '-e' may give you
problems. You could instead do '-' ID and validate that the ID is a 'd'
or an 'e'.
Regards
- henrik
|
|
|
Powered by
FUDForum. Page generated in 0.03438 seconds