Help for grammar [message #704218] |
Thu, 28 July 2011 07:53  |
Eclipse User |
|
|
|
Hello
I am in trouble. Please have a look this with fresh eyes , I dont know what i have to do. I have a grammar as below.
While im coding in something.mydsl I want to allow users to give space as much as they want between of parameter while they are declaring the type NonEmtyLine.
I have multiple terminal Rules Because my some parameters contains some strange characters.
file.modern.novel.someoneelse : boookName :languagenumber[%d],languageId, (orginallanguage|translated)byTranslator : ,,,numbers...so on
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
LibModel:
(types+=Type)*;
Type:
LibComment1|NonEmpityLine|AtShell |Version| languages;
LcfComment1:
text=HASH_COMMENT
;
AtShell:
"@" ShellName=ID ('=' DOUBLE|INT|'-'INT)?
;
Version:
{Version}
'@logstart' ('='startNumber=(DOUBLE|'X' ))?;
languages:
{languages}
'@translators=' mytrans=(myID ) ;
NonEmpityLine :
//allow users leave some space between of parameters
Writer=Writer ':' WritersBooks=WritersBooks':' NELTranslator=NELTranslator':' ('store')? ( isbn=isbn',' pageNumber=pageNumber)? (',' Amaunt=Amaunt)? (':')?
(filter=filter ('&&') | ('||') | ('==') filtered=filtered)?
;
filtered:
filtered=Words
;
filter:
filter=Words
;
NELTranslator:
NELTranslator= Characters
;
Writer:
Writer=Words
;
WritersBooks:
WritersBooks= Words
;
isbn:
{isbn}
isbn= ('-')?((INT)|DOUBLE)
;
pageNumber:
{pageNumber}
pageNumber=('-')?((INT)|DOUBLE)
;
//for new orders it might me negative value
Amaunt:
{Amaunt}
Amaunt=('-')?((INT)|DOUBLE)
;
Words hidden (): ID (WS ID)* ;
Characters hidden () : myID (WS myID)* ;
terminal WS : (' '|'\t'|'\r'|'\n')+ ;
terminal HASH_COMMENT : '#' !('\n'|'\r')* ('\r'? '\n')? ;
terminal ID : '^'?('a'..'z'|'A'..'Z'|'_'|'.') ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'.')* ;
terminal DOUBLE : INT '.' INT;
terminal INT returns ecore::EInt: ('0'..'9')+ ;
terminal myID: '^'?('a'..'z'|'A'..'Z'|'_'|'.') ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'%'|'['|']'|'('|')'|'.'|' '|','|'|' )* ;
[Updated on: Thu, 28 July 2011 09:38] by Moderator
|
|
|
|
|
Re: Help for grammar [message #704268 is a reply to message #704218] |
Thu, 28 July 2011 08:15   |
Eclipse User |
|
|
|
For starters, the terminals ID and myID overlap, you will never get a
myID token if ID matches the input.
To solve the issue use a data rule and have a terminal for only the
additional special characters.
myID = ID (ExtID | ID)* ;
terminal ID = ...as is...;
terminal ExtID = ('%'|'['|']'|'('|')'|'.'|' '|','|'|' )+ ;
Regarding hidden WS - you have to state what to hide for the root node
if you want hiding of WS to take place.
LibModel hidden(WS) : ..... ;
Hope that helps.
Regards
- henrik
On 7/28/11 1:53 PM, Caner wrote:
> Hello
> I am in trouble. Please have a look this with fresh eyes , I dont know
> what i have to do. I have a grammar as below.
>
> While im coding in something.mydsl I want to give allow users to give
> space as much as they want between of parameter while they are typing
> the for NonEmtyLine.
>
> I have multiple terminal Rules Because my some parameters contains some
> strange characters.
>
> file.modern.novel.someoneelse : boookName
> :languagenumber[%d],languageId, (orginallanguage|translated)byTranslator
> ,,,so on
>
>
>
> import "http://www.eclipse.org/emf/2002/Ecore" as ecore
>
> LibModel:
> (types+=Type)*;
> Type:
> LibComment1|NonEmpityLine|AtShell |Version| languages;
>
> LcfComment1: text=HASH_COMMENT
> ;
> AtShell:
> "@" ShellName=ID ('=' DOUBLE|INT|'-'INT)?
> ;
>
> Version:
> {Version}
> '@logstart' ('='startNumber=(DOUBLE|'X' ))?;
>
> languages:
> {languages}
> '@translators=' mytrans=(myID ) ;
>
> NonEmpityLine :
> //allow users leave some space between of parameters
>
> Writer=Writer ':' WritersBooks=WritersBooks':'
> NELTranslator=NELTranslator':' ('store')? ( isbn=isbn','
> pageNumber=pageNumber)? (',' Amaunt=Amaunt)? (':')?
> ;
>
> NELTranslator:
> NELTranslator= Characters ;
>
> Writer:
> Writer=Words
> ;
>
> WritersBooks:
> WritersBooks= Words
> ;
>
> isbn:
> {isbn}
> isbn= ('-')?((INT)|DOUBLE)
> ;
>
> pageNumber:
>
> {pageNumber}
> pageNumber=('-')?((INT)|DOUBLE)
> ;
>
> //for new orders it might me negative value
> Amaunt:
> {Amaunt}
> Amaunt=('-')?((INT)|DOUBLE)
>
> ;
>
> Words hidden (): ID (WS ID)* ;
>
> Characters hidden () : myID (WS myID)* ;
>
> terminal WS : (' '|'\t'|'\r'|'\n')+ ;
>
> terminal HASH_COMMENT : '#' !('\n'|'\r')* ('\r'? '\n')? ;
>
> terminal ID : '^'?('a'..'z'|'A'..'Z'|'_'|'.')
> ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'.')* ;
> terminal DOUBLE : INT '.' INT;
>
> terminal INT returns ecore::EInt: ('0'..'9')+ ;
>
> terminal myID: '^'?('a'..'z'|'A'..'Z'|'_'|'.')
> ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'%'|'['|']'|'('|')'|'.'|' '|','|'|' )* ;
>
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|