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

parse "lakes" somehow

parent cf0f2201
No related branches found
No related tags found
No related merge requests found
......@@ -110,23 +110,23 @@ aspect_refine_constructor_declaration ::= REFINE IDENTIFIER (PUBLIC | PROTECTED
aspect_field_declaration ::= modifiers aspect_type IDENTIFIER DOT variable_declarator (COMMA variable_declarator)* SEMICOLON
aspect_syn_attribute_declaration ::= annotation* SYN NTA? LAZY? FINAL? aspect_type IDENTIFIER DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? RPAREN (CIRCULAR expression_in_brackets)? ( ASSIGN JAVA_EXPRESSION SEMICOLON | block | SEMICOLON )
aspect_syn_attribute_declaration ::= annotation* SYN NTA? LAZY? FINAL? aspect_type IDENTIFIER DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? RPAREN (CIRCULAR expression_in_brackets)? ( ASSIGN expression SEMICOLON | block | SEMICOLON )
aspect_inh_attribute_declaration ::= annotation* INH NTA? LAZY? FINAL? aspect_type IDENTIFIER DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? (CIRCULAR expression_in_brackets)? SEMICOLON
aspect_rewrite ::= REWRITE IDENTIFIER (IDENTIFIER DOT IDENTIFIER LPAREN RPAREN)? LBRACE ((WHEN LPAREN JAVA_EXPRESSION RPAREN)? TO aspect_type ( JAVA_EXPRESSION SEMICOLON | block ))+ RBRACE
aspect_rewrite ::= REWRITE IDENTIFIER (IDENTIFIER DOT IDENTIFIER LPAREN RPAREN)? LBRACE ((WHEN LPAREN expression RPAREN)? TO aspect_type ( expression SEMICOLON | block ))+ RBRACE
aspect_syn_equation ::= annotation* EQUATION IDENTIFIER DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)*)? RPAREN ( ASSIGN JAVA_EXPRESSION SEMICOLON | block )
aspect_syn_equation ::= annotation* EQUATION IDENTIFIER DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)*)? RPAREN ( ASSIGN expression SEMICOLON | block )
aspect_refine_syn_equation ::= REFINE IDENTIFIER EQUATION IDENTIFIER attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)*)? RPAREN (ASSIGN JAVA_EXPRESSION SEMICOLON | block)
aspect_refine_syn_equation ::= REFINE IDENTIFIER EQUATION IDENTIFIER attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)*)? RPAREN (ASSIGN expression SEMICOLON | block)
aspect_inh_equation ::= annotation* EQUATION IDENTIFIER DOT IDENTIFIER LPAREN (INT IDENTIFIER)? DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)*)? RPAREN (ASSIGN JAVA_EXPRESSION | block)
aspect_inh_equation ::= annotation* EQUATION IDENTIFIER DOT IDENTIFIER LPAREN (INT IDENTIFIER)? DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)*)? RPAREN (ASSIGN expression | block)
aspect_refine_inh_equation ::= REFINE IDENTIFIER EQUATION IDENTIFIER DOT IDENTIFIER LPAREN (INT IDENTIFIER)? RPAREN DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)*)? RPAREN (ASSIGN JAVA_EXPRESSION | block)
aspect_refine_inh_equation ::= REFINE IDENTIFIER EQUATION IDENTIFIER DOT IDENTIFIER LPAREN (INT IDENTIFIER)? RPAREN DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)*)? RPAREN (ASSIGN expression | block)
collection_attribute ::= annotation* COLL aspect_type IDENTIFIER DOT attribute_name LPAREN RPAREN CIRCULAR? (expression_in_brackets)? (WITH IDENTIFIER)? (ROOT IDENTIFIER)? SEMICOLON
collection_contribution ::= annotation* CONTRIBUTES ( NTA JAVA_EXPRESSION TO IDENTIFIER DOT attribute_name LPAREN RPAREN | EACH? JAVA_EXPRESSION (WHEN JAVA_EXPRESSION)? TO IDENTIFIER DOT attribute_name LPAREN RPAREN (FOR EACH? JAVA_EXPRESSION)? | block TO IDENTIFIER DOT attribute_name LPAREN RPAREN ) SEMICOLON
collection_contribution ::= annotation* CONTRIBUTES ( NTA expression TO IDENTIFIER DOT attribute_name LPAREN RPAREN | EACH? expression (WHEN expression)? TO IDENTIFIER DOT attribute_name LPAREN RPAREN (FOR EACH? expression)? | block TO IDENTIFIER DOT attribute_name LPAREN RPAREN ) SEMICOLON
aspect_add_interface ::= IO IMPLEMENTS type_name_list SEMICOLON
......@@ -228,7 +228,7 @@ cast_expression ::= LPAREN type RPAREN unary_expression_not_plus_minus
primary_expression ::= primary_prefix (primary_suffix)*
primary_prefix ::= literal | THIS | (SUPER DOT java_identifier) | (LPAREN expression RPAREN) | allocation_expression | (result_type DOT CLASS) | name_name
primary_prefix ::= literal | THIS | (SUPER DOT java_identifier) | (LPAREN expression RPAREN) | allocation_expression | (result_type DOT_CLASS) | name_name
primary_suffix ::= (DOT THIS) | (DOT allocation_expression) | (DOT type_arguments java_identifier) | (LBRACKET expression RBRACKET) | (DOT java_identifier) | arguments | DOUBLECOLON NEW | DOUBLECOLON java_identifier
......@@ -299,9 +299,10 @@ class_declaration ::= CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE // CLASS IDENTIFIER
interface_declaration ::= INTERFACE_ANYTHING_LBRACE_ANYTHING_RBRACE // INTERFACE java_indentifier LBRACE interface_member_declaration RBRACE
// can be anywhere
enum_declaration ::= ENUM_ANYTHING_LPAREN_ANYTHING_RPAREN // ENUM java_identifier (implements type_name_list)? LBRACE enum_constant (COMMA enum_constant)* (SEMICOLON class_body_declaration* )? RBRACE
enum_declaration ::= ENUM_ANYTHING_LBRACE_ANYTHING_RBRACE // ENUM java_identifier (implements type_name_list)? LBRACE enum_constant (COMMA enum_constant)* (SEMICOLON class_body_declaration* )? RBRACE
// only within attribute equations
block ::= LBRACE_ANYTHING_RBRACE
// TODO unsupported
......
......@@ -27,7 +27,7 @@ FormalComment = "/**" [^*]* [*]+([^*/][^*]*[*]+)*[/]
MultiLineComment = "/*" [^*]+ [*]+([^*/][^*]*[*]+)*[/]
NotParenthesis = [^{}]+
NotBrace = ( [^{}/]+ | [/][^{}/*] )*
// from jjt
DecimalLiteral = [1-9] [0-9]*
......@@ -47,37 +47,54 @@ StringLiteral = \" ( [^\"\\\n\r] | ( \\ ( [ntbrf\\'\"] | [0-7][0-7?] | [0
Identifier = [:jletter:] [:jletterdigit:]*
%state JASTADD
%state EXPECT_JAVA_IN_PAREN
%state EXPECT_CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE
%state CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE
%state LBRACE_ANYTHING_RBRACE
%state JAVA_IN_PAREN
%state COLLECTION_DECL
%state ATTRIBUTE_DEFINITION
%state LPAREN_ANYTHING_RPAREN
%%
<YYINITIAL> {
<YYINITIAL,COLLECTION_DECL,ATTRIBUTE_DEFINITION> {
{WhiteSpace}+ { return TokenType.WHITE_SPACE; }
{SingleLineComment} { return JastAddAspectTypes.SINGLE_LINE_COMMENT; }
{FormalComment} { return JastAddAspectTypes.FORMAL_COMMENT; }
{MultiLineComment} { return JastAddAspectTypes.MULTI_LINE_COMMENT; }
// "EQ" { yybegin(YYINITIAL); return JastAddAspectTypes.EQ; }
// "{" { yybegin(JAVA); counter = 1; }
"class" { yybegin(EXPECT_CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE); }
}
<EXPECT_JAVA_IN_PAREN> {
"{" { yybegin(JAVA_IN_PAREN); counter = 1; }
<EXPECT_CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE> {
"{" { yybegin(CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE); counter = 1; }
{NotBrace} {} // skip over everything
}
<JAVA_IN_PAREN> {
<CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE> {
{SingleLineComment} {}
{FormalComment} {}
{MultiLineComment} {}
{CharacterLiteral} {}
{StringLiteral} {}
{NotParenthesis} {}
"{" { counter++; }
"}" { counter--; if (counter==0) { yybegin(YYINITIAL); return JastAddAspectTypes.JAVA_IN_PAREN; } }
"}" { counter--; if (counter==0) { yybegin(YYINITIAL); return JastAddAspectTypes.CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE; } }
{NotBrace} {}
}
<YYINITIAL,COLLECTION_DECL> {
<LBRACE_ANYTHING_RBRACE> {
{SingleLineComment} {}
{FormalComment} {}
{MultiLineComment} {}
{CharacterLiteral} {}
{StringLiteral} {}
"{" { counter++; }
"}" { counter--; if (counter==0) { yybegin(YYINITIAL); return JastAddAspectTypes.LBRACE_ANYTHING_RBRACE; } }
{NotBrace} {}
}
<YYINITIAL,COLLECTION_DECL,ATTRIBUTE_DEFINITION> {
"abstract" { return JastAddAspectTypes.ABSTRACT; }
//"assert" { return JastAddAspectTypes.ASSERT; }
"boolean" { return JastAddAspectTypes.BOOLEAN; }
......@@ -86,7 +103,7 @@ Identifier = [:jletter:] [:jletterdigit:]*
//"case" { return JastAddAspectTypes.CASE; }
//"catch" { return JastAddAspectTypes.CATCH; }
"char" { return JastAddAspectTypes.CHAR; }
"class" { return JastAddAspectTypes.CLASS; }
//"class" { return JastAddAspectTypes.CLASS; }
//"const" { return JastAddAspectTypes.CONST; }
//"continue" { return JastAddAspectTypes.CONTINUE; }
//"default" { return JastAddAspectTypes._DEFAULT; }
......@@ -133,14 +150,14 @@ Identifier = [:jletter:] [:jletterdigit:]*
//"while" { return JastAddAspectTypes.WHILE; }
// JastAdd
"inh" { return JastAddAspectTypes.INH; }
"syn" { return JastAddAspectTypes.SYN; }
"inh" { yybegin(ATTRIBUTE_DEFINITION); return JastAddAspectTypes.INH; }
"syn" { yybegin(ATTRIBUTE_DEFINITION); return JastAddAspectTypes.SYN; }
"lazy" { return JastAddAspectTypes.LAZY; }
"rewrite" { return JastAddAspectTypes.REWRITE; }
"to" { return JastAddAspectTypes.TO; }
"when" { return JastAddAspectTypes.WHEN; }
"aspect" { return JastAddAspectTypes.ASPECT; }
"eq" { return JastAddAspectTypes.EQUATION; }
"eq" { yybegin(ATTRIBUTE_DEFINITION); return JastAddAspectTypes.EQUATION; }
"circular" { return JastAddAspectTypes.CIRCULAR; }
"refine" { return JastAddAspectTypes.REFINE; }
"contributes" { return JastAddAspectTypes.CONTRIBUTES; }
......@@ -159,7 +176,16 @@ Identifier = [:jletter:] [:jletterdigit:]*
"root" { return JastAddAspectTypes.ROOT; }
}
<YYINITIAL, COLLECTION_DECL> {
<ATTRIBUTE_DEFINITION> {
"{" { yybegin(LBRACE_ANYTHING_RBRACE); counter = 1; }
}
// a semicolon exits the COLLECTION_DECL (because we ignore semicolons in expressions)
<COLLECTION_DECL, ATTRIBUTE_DEFINITION> {
";" { yybegin(YYINITIAL); return JastAddAspectTypes.SEMICOLON; }
}
<YYINITIAL,COLLECTION_DECL,ATTRIBUTE_DEFINITION> {
// LITERALS
{IntegerLiteral} { return JastAddAspectTypes.INTEGER_LITERAL; }
{FloatingPointLiteral} { return JastAddAspectTypes.FLOATING_POINT_LITERAL; }
......@@ -169,17 +195,22 @@ Identifier = [:jletter:] [:jletterdigit:]*
// IDENTIFIERS
{Identifier} { return JastAddAspectTypes.IDENTIFIER; }
// COMBINED TOKENS
".class" { return JastAddAspectTypes.DOT_CLASS; }
// SEPARATORS
"(" { return JastAddAspectTypes.LPAREN; }
")" { return JastAddAspectTypes.RPAREN; }
"{" { return JastAddAspectTypes.LBRACE; }
"}" { return JastAddAspectTypes.RBRACE; }
"[" { return JastAddAspectTypes.LBRACKET; }
"]" { return JastAddAspectTypes.RBRACKET; }
";" { return JastAddAspectTypes.SEMICOLON; }
"," { return JastAddAspectTypes.COMMA; }
"." { return JastAddAspectTypes.DOT; }
"@" { return JastAddAspectTypes.AT; }
//"@" { return JastAddAspectTypes.AT; }
// OPERATORS
"=" { return JastAddAspectTypes.ASSIGN; }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment