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

parse "lakes" somehow

parent cf0f2201
Branches
Tags
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