Skip to content
Snippets Groups Projects
Commit 366a5747 authored by Johannes Mey's avatar Johannes Mey
Browse files

update to RelAst grammar

parent 3244b27b
Branches
No related tags found
No related merge requests found
...@@ -13,8 +13,26 @@ ...@@ -13,8 +13,26 @@
tokenTypeClass="org.jastadd.tooling.parser.RelAstGrammarTokenType" tokenTypeClass="org.jastadd.tooling.parser.RelAstGrammarTokenType"
} }
simpleFile ::= item_* relAstGrammarFile ::= comment* declaration*
private item_ ::= (property|COMMENT|CRLF) declaration ::= (type_decl | relation) comment*
property ::= (KEY? SEPARATOR VALUE?) | KEY comment ::= (WHITESPACE | MULTILINECOMMENT | DOCCOMMENT | SINGLELINECOMMENT)
type_decl ::= ABSTRACT? ID (COL ID)? (ASSIGN component*)? SCOL
component ::= (SLASH actual_component SLASH) | actual_component
actual_component ::= (ID (COL ID)? STAR?) | (LBRACKET ID (COL ID)? RBRACKET) | (LT ID (COL (ID | java_type_use))? GT)
java_type_use ::= parameterized_java_type_use | simple_java_type_use
parameterized_java_type_use ::= simple_java_type_use LT java_type_use (COMMA java_type_use)* GT
simple_java_type_use ::= ID (DOT ID)*
relation ::= REL ((unnamed_role LEFT navigable_role) | (navigable_role RIGHT unnamed_role) | (navigable_role BIDIRECTIONAL navigable_role)) SCOL
unnamed_role ::= ID | navigable_role
navigable_role ::= ID DOT ID (STAR | QUESTION_MARK)?
...@@ -16,30 +16,51 @@ import com.intellij.psi.TokenType; ...@@ -16,30 +16,51 @@ import com.intellij.psi.TokenType;
%eof{ return; %eof{ return;
%eof} %eof}
CRLF=\R
WHITE_SPACE=[\ \n\t\f]
FIRST_VALUE_CHARACTER=[^ \n\f\\] | "\\"{CRLF} | "\\".
VALUE_CHARACTER=[^\n\f\\] | "\\"{CRLF} | "\\".
END_OF_LINE_COMMENT=("#"|"!")[^\r\n]*
SEPARATOR=[:=]
KEY_CHARACTER=[^:=\ \n\t\f\\] | "\\ "
%state WAITING_VALUE WhiteSpace = [ ] | \t | \f | \n | \r | \r\n
ID = [a-zA-Z$_][a-zA-Z0-9$_]*
MultiLineComment = [/][*][^*]+[*]+([^*/][^*]*[*]+)*[/]
DocComment = [/][*][*][^*]*[*]+([^*/][^*]*[*]+)*[/]
SingleLineComment = [/][/] [^\n\r]* (\n | \r | \r\n)
%%
<YYINITIAL> {END_OF_LINE_COMMENT} { yybegin(YYINITIAL); return RelAstGrammarTypes.COMMENT; }
<YYINITIAL> {KEY_CHARACTER}+ { yybegin(YYINITIAL); return RelAstGrammarTypes.KEY; }
<YYINITIAL> {SEPARATOR} { yybegin(WAITING_VALUE); return RelAstGrammarTypes.SEPARATOR; } %xstate COMMENT
%state DECLARATION
<WAITING_VALUE> {CRLF}({CRLF}|{WHITE_SPACE})+ { yybegin(YYINITIAL); return TokenType.WHITE_SPACE; } %%
<WAITING_VALUE> {WHITE_SPACE}+ { yybegin(WAITING_VALUE); return TokenType.WHITE_SPACE; }
<WAITING_VALUE> {FIRST_VALUE_CHARACTER}{VALUE_CHARACTER}* { yybegin(YYINITIAL); return RelAstGrammarTypes.VALUE; } <DECLARATION> {
{WhiteSpace} { return TokenType.WHITE_SPACE; } // maybe ignore this
{MultiLineComment} { return RelAstGrammarTypes.MULTILINECOMMENT; } // maybe ignore this
{DocComment} { return RelAstGrammarTypes.DOCCOMMENT; } // maybe ignore this
{SingleLineComment} { return RelAstGrammarTypes.SINGLELINECOMMENT; } // maybe ignore this
}
({CRLF}|{WHITE_SPACE})+ { yybegin(YYINITIAL); return TokenType.WHITE_SPACE; } <YYINITIAL,COMMENT> {
{WhiteSpace}+ { yybegin(YYINITIAL); return TokenType.WHITE_SPACE; }
{MultiLineComment} { yybegin(YYINITIAL); return RelAstGrammarTypes.MULTILINECOMMENT; }
{DocComment} { yybegin(YYINITIAL); return RelAstGrammarTypes.DOCCOMMENT; }
{SingleLineComment} { yybegin(YYINITIAL); return RelAstGrammarTypes.SINGLELINECOMMENT; }
}
<YYINITIAL,DECLARATION> {
"abstract" { yybegin(DECLARATION); return RelAstGrammarTypes.ABSTRACT; }
"rel" { yybegin(DECLARATION); return RelAstGrammarTypes.REL; }
";" { yybegin(COMMENT); return RelAstGrammarTypes.SCOL; }
":" { yybegin(DECLARATION); return RelAstGrammarTypes.COL; }
"::=" { yybegin(DECLARATION); return RelAstGrammarTypes.ASSIGN; }
"*" { yybegin(DECLARATION); return RelAstGrammarTypes.STAR; }
"." { yybegin(DECLARATION); return RelAstGrammarTypes.DOT; }
"," { yybegin(DECLARATION); return RelAstGrammarTypes.COMMA; }
"<" { yybegin(DECLARATION); return RelAstGrammarTypes.LT; }
">" { yybegin(DECLARATION); return RelAstGrammarTypes.GT; }
"[" { yybegin(DECLARATION); return RelAstGrammarTypes.LBRACKET; }
"]" { yybegin(DECLARATION); return RelAstGrammarTypes.RBRACKET; }
"/" { yybegin(DECLARATION); return RelAstGrammarTypes.SLASH; }
"?" { yybegin(DECLARATION); return RelAstGrammarTypes.QUESTION_MARK; }
"->" { yybegin(DECLARATION); return RelAstGrammarTypes.RIGHT; }
"<-" { yybegin(DECLARATION); return RelAstGrammarTypes.LEFT; }
"<->" { yybegin(DECLARATION); return RelAstGrammarTypes.BIDIRECTIONAL; }
{ID} { yybegin(DECLARATION); return RelAstGrammarTypes.ID; }
[^] { return TokenType.BAD_CHARACTER; } [^] { return TokenType.BAD_CHARACTER; }
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment