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

WIP

parent 0181c4ea
Branches
Tags
No related merge requests found
......@@ -13,15 +13,161 @@
tokenTypeClass="org.jastadd.tooling.aspect.JastAddAspectTokenType"
}
jastaddAspectFile ::= (attribute_equation|comment)*
jastaddAspectFile ::= (aspect_declaration|comment)*
comment ::= (WHITESPACE | MULTILINECOMMENT | DOCCOMMENT | SINGLELINECOMMENT)
attribute_equation ::= EQ java_block
//attribute_equation ::= EQ java_block
//
//java_block ::= JAVABLOCK
//{
// implements="org.jastadd.tooling.aspect.psi.JastAddAspectJavaBlockExtension"
// extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectJavaBlockImplExtension"
//}
java_block ::= JAVABLOCK
{
implements="org.jastadd.tooling.aspect.psi.JastAddAspectJavaBlockExtension"
extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectJavaBlockImplExtension"
}
aspect_declaration ::= ASPECT aspect_body
aspect_body ::= LBRACE aspect_body_declaration* RBRACE
aspect_body_declaration ::= ( aspect_refine_inh_equation
| aspect_refine_syn_equation
| aspect_refine_method_declaration
| aspect_refine_constructor_declaration
| aspect_class_declaration
| aspect_interface_declaration
| aspect_enum_declaration
| aspect_syn_attribute_declaration
| aspect_inh_attribute_declaration
| aspect_rewrite
| aspect_inh_equation
| aspect_syn_equation
| aspect_add_interface
| aspect_extend_interface
| collection_attribute
| collection_contribution
| aspect_method_declaration
| aspect_constructor_declaration
| aspect_field_declaration
| aspect_cache_declaration )
aspect_body_declarations_eof ::= aspect_body_declaration* EOF
aspect_class_declaration ::= modifiers CLASS id type_parameters (EXTENDS class_or_interface_type)? (IMPLEMENTS type_name_list)? aspect_class_body
aspect_class_body ::= JAVA_CLASS_BODY_DECLARATION // including curly braces
aspect_interface_declaration ::= modifiers INTERFACE id type_parameters? (EXTENDS type_name_list)? LBRACE aspect_interface_member_declaration* RBRACE
aspect_interface_member_declaration ::= ( aspect_nested_class_declaration
| aspect_nested_interface_declaration
| aspect_interface_syn_attribute_declaration
| aspect_interface_inh_attribute_declaration
| aspect_interface_method_declaration
| aspect_interface_field_declaration )
aspect_interface_syn_attribute_declaration ::= annotation* SYN LAZY? FINAL? aspect_type attribute_name LPAREN (type ID (COMMA type ID)* )? RPAREN (CIRCULAR LBRACKET JAVA_EXPRESSION RBRACKET)? SCOL
aspect_interface_inh_attribute_declaration ::= annotation* INH LAZY? FINAL? aspect_type attribute_name LPAREN (type ID (COMMA type ID)* )? RPAREN (CIRCULAR LBRACKET JAVA_EXPRESSION RBRACKET)? SCOL
aspect_interface_method_declaration ::= (PUBLIC | PROTECTED | PRIVATE | STATIC | ABSTRACT | FINAL | NATIVE | SYNCHRONIZED )* aspect_result_type method_declarator (THROWS name_list ) SCOL
aspect_interface_field_declaration ::= modifiers aspect_type variable_declarator (COMMA variable_declarator)* SCOL
aspect_nested_interface_declaration ::= modifiers INTERFACE ID type_parameters? EXTENDS? LBRACE JAVA_INTERFACE_MEMBER_DECLARATIONS RBRACE
aspect_nested_class_declaration ::= modifiers CLASS ID type_parameters? (EXTENDS class_or_interface_type)? (IMPLEMENTS type_name_list)? JAVA_CLASS_BODY_DECLARATION
aspect_method_declaration ::= modifiers type_parameters? aspect_result_type ID DOT method_declarator (THROWS name_list)? (block | SCOL)
aspect_refine_method_declaration ::= REFINE [ID] modifers type_parameters? aspect_result_type ID DOT method_declarator (THROWS name_list)? (block | SCOL)
aspect_constructor_declaration ::= modifiers ID DOT ID formal_parameters (THROWS name_list)? LBRACE JAVA_EXPLICIT_CONSTRUCTUR_BLOCK RBRACE
aspect_refine_constructor_declaration ::= REFINE ID (PUBLIC | PROTECTED | PRIVATE) ID DOT ID formal_parameters (THROWS name_list)? LBRACE block_statement* RBRACE
aspect_field_declaration ::= modifiers aspect_type ID DOT variable_declarator (COMMA variable_declarator)* SCOL
aspect_syn_attribute_declaration ::= annotation* SYN NTA? LAZY? FINAL? aspect_type ID DOT attribute_name LPAREN type ID (COMMA type ID)* RPAREN (CIRCULAR LBRACKET JAVA_EXPRESSION RBRACKET)? ( EQ JAVA_EXPRESSION SCOL | block | SCOL )
aspect_inh_attribute_declaration ::= annotation* INH NTA? LAZY? FINAL? aspect_type ID DOT attribute_name LPAREN (type ID (COMMA type ID)* )? (CIRCULAR LBRACKET JAVA_EXPRESSION RBRACKET)? SCOL
aspect_rewrite ::= REWRITE ID (ID DOT ID LPAREN RPAREN)? LBRACE ((WHEN LPAREN JAVA_EXPRESSION RPAREN)? TO aspect_type ( JAVA_EXPRESSION SCOL | block ))+ RBRACE
aspect_syn_equation ::= annotation* ID DOT attribute_name LPAREN (type ID (COMMA type ID)*)? RPAREN ( EQ JAVA_EXPRESSION SCOL | block )
aspect_refine_syn_equation ::= REFINE ID EQ ID attribute_name LPAREN (type ID (COMMA type ID)*)? RPAREN (EQ JAVA_EXPRESSION SCOL | block)
aspect_inh_equation ::= annotation* EQ ID DOT ID LPAREN (INT ID)? DOT attribute_name LPAREN (type ID (COMMA type ID)*)? RPAREN (EQ JAVA_EXPRESSION | block)
aspect_refine_inh_equation ::= REFINE ID EQ ID DOT ID LPAREN (INT ID)? RPAREN DOT attribute_name LPAREN (type ID (COMMA type ID)*)? RPAREN (EQ JAVA_EXPRESSION | block)
collection_attribute ::= annotation* COLL aspect_type ID DOT attribute_name LPAREN RPAREN CIRCULAR? (LBRACKET JAVA_EXPRESSION RBRACKET)? (WITH ID)? (ROOT ID)? SCOL
collection_contribution ::= annotation* CONTRIBUTES ( NTA JAVA_EXPRESSION TO ID DOT attribute_name LPAREN RPAREN | EACH? JAVA_EXPRESSION (WHEN JAVA_EXPRESSION)? TO ID DOT attribute_name LPAREN RPAREN (FOR EACH? JAVA_EXPRESSION)? | block TO ID DOT attribute_name LPAREN RPAREN ) SCOL
aspect_add_interface ::= IO IMPLEMENTS type_name_list SCOL
aspect_extend_interface ::= ID EXTENDS type_name_list SCOL
// added
type_name_list ::= class_or_interface_type (COMMA class_or_interface_type)*
attribute_name ::= ID
// TODO | UnmodifiedClassDeclaration("")
block_statement ::= (FINAL? type java_identifier local_variable_declaration SCOL) | statement
aspect_cache_declaration ::= (CACHE | UNCACHE) ID DOT attribute_name LPAREN (type ID? (type ID?)* )? RPAREN SCOL
modifiers ::= (PUBLIC | STATIC | PROTECTED | PRIVATE | FINAL | ABSTRACT | SYNCHRONIZED | NATIVE | TRANSIENT | VOLATILE | STRICTFP)*
// Attribute type names can not start with JastAdd reserved words such as 'syn', 'eq', etc.
aspect_type ::= aspect_reference_type | ( primitive_type (LBRACKET RBRACKET)? )
formal_parameters ::= LPAREN ( formal_parameter ( COMMA formal_parameter )* )? RPAREN
name_list ::= name (COMMA name)*
formal_parameter ::= FINAL? type DOTS? variable_declarator_id
variable_declarator_id ::= java_identifier ( LBRACKET RBRACKET )*
java_identifier ::= ID | INH | SYN | LAZY | REWRITE | TO | WHEN | ASPECT | EQUATION | CIRCULAR | REFINE | COLL | CONTRIBUTES | EACH | NTA | CACHE | UNCACHE
aspect_enum_declaration ::= modifiers ENUM ID (IMPLEMENTS type_name_list)? JAVA_ENUM_BODY
variable_declarator ::= variable_declarator_id ( EQ variable_initializer )?
variable_initializer ::= array_initializer | expression
array_initializer ::= LBRACE ( variable_initializer (COMMA variable_initializer)* )? RBRACE
primitive_type ::= boolean | char | byte | short | int | long | float | double
class_or_interface_type ::= java_identifier type_arguments? (DOT java_identifier type_arguments? )*
type_arguments ::= LESSTHAN (type_argument (COMMA type_argument)* )? MORETHAN
type_argument ::= reference_type | (QUESTIONMARK wildcard_bounds?)
wildcard_bounds ::= (EXTENDS reference_type) | SUPER reference_type
reference_type ::= ( primitive_type (LBRACKET RBRACKET)+ ) | ( class_or_interface_type (LBRACKET RBRACKET)* )
aspect_reference_type ::= aspect_class_or_interface_type (LBRACKET RBRACKET)*
aspect_class_or_interface_type ::= ID type_arguments? (DOT java_identifier type_arguments? )*
local_variable_declaration ::= FINAL? type variable_declarator (COMMA variable_declarator)*
type_parameters ::= LESSTHAN type_parameter (COMMA type_parameter)* GREATERTHAN
type_parameter ::= java_identifier type_bound?
type_bound ::= EXTENDS class_or_interface_type (AMPERSAND class_or_interface_type)*
aspect_result_type ::= VOID | aspect_type
method_declarator ::= java_identifier formal_parameters (LBRACKET RBRACKET)*
......@@ -37,8 +37,82 @@ NotParenthesis = [^{}]*
"{" { yybegin(JAVA); counter = 1; }
}
<JAVA> {
<JAVA_PARENTHESIS_BLOCK> {
{NotParenthesis} {}
"{" { counter++; yybegin(JAVA); }
"}" { counter--; if (counter==0) { yybegin(YYINITIAL); return JastAddAspectTypes.JAVABLOCK; } }
}
<JAVATOKENS> {
"abstract" { return JastAddAspectTypes.ABSTRACT; }
"assert" { return JastAddAspectTypes.ASSERT; }
"boolean" { return JastAddAspectTypes.BOOLEAN; }
"break" { return JastAddAspectTypes.BREAK; }
"byte" { return JastAddAspectTypes.BYTE; }
"case" { return JastAddAspectTypes.CASE; }
"catch" { return JastAddAspectTypes.CATCH; }
"char" { return JastAddAspectTypes.CHAR; }
"class" { return JastAddAspectTypes.CLASS; }
"const" { return JastAddAspectTypes.CONST; }
"continue" { return JastAddAspectTypes.CONTINUE; }
"default" { return JastAddAspectTypes._DEFAULT; }
"do" { return JastAddAspectTypes.DO; }
"double" { return JastAddAspectTypes.DOUBLE; }
"else" { return JastAddAspectTypes.ELSE; }
"enum" { return JastAddAspectTypes.ENUM; }
"extends" { return JastAddAspectTypes.EXTENDS; }
"false" { return JastAddAspectTypes.FALSE; }
"final" { return JastAddAspectTypes.FINAL; }
"finally" { return JastAddAspectTypes.FINALLY; }
"float" { return JastAddAspectTypes.FLOAT; }
"for" { return JastAddAspectTypes.FOR; }
"goto" { return JastAddAspectTypes.GOTO; }
"if" { return JastAddAspectTypes.IF; }
"implements" { return JastAddAspectTypes.IMPLEMENTS; }
"import" { return JastAddAspectTypes.IMPORT; }
"instanceof" { return JastAddAspectTypes.INSTANCEOF; }
"int" { return JastAddAspectTypes.INT; }
"interface" { return JastAddAspectTypes.INTERFACE; }
"long" { return JastAddAspectTypes.LONG; }
"native" { return JastAddAspectTypes.NATIVE; }
"new" { return JastAddAspectTypes.NEW; }
"null" { return JastAddAspectTypes.NULL; }
"package" { return JastAddAspectTypes.PACKAGE; }
"private" { return JastAddAspectTypes.PRIVATE; }
"protected" { return JastAddAspectTypes.PROTECTED; }
"public" { return JastAddAspectTypes.PUBLIC; }
"return" { return JastAddAspectTypes.RETURN; }
"short" { return JastAddAspectTypes.SHORT; }
"static" { return JastAddAspectTypes.STATIC; }
"strictfp" { return JastAddAspectTypes.STRICTFP; }
"super" { return JastAddAspectTypes.SUPER; }
"switch" { return JastAddAspectTypes.SWITCH; }
"synchronized" { return JastAddAspectTypes.SYNCHRONIZED; }
"this" { return JastAddAspectTypes.THIS; }
"throw" { return JastAddAspectTypes.THROW; }
"throws" { return JastAddAspectTypes.THROWS; }
"transient" { return JastAddAspectTypes.TRANSIENT; }
"true" { return JastAddAspectTypes.TRUE; }
"try" { return JastAddAspectTypes.TRY; }
"void" { return JastAddAspectTypes.VOID; }
"volatile" { return JastAddAspectTypes.VOLATILE; }
"while" { return JastAddAspectTypes.WHILE; }
// JastAdd
"inh" { return JastAddAspectTypes.INH; }
"syn" { 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; }
"circular" { return JastAddAspectTypes.CIRCULAR; }
"refine" { return JastAddAspectTypes.REFINE; }
"contributes" { return JastAddAspectTypes.CONTRIBUTES; }
"each" { return JastAddAspectTypes.EACH; }
"nta" { return JastAddAspectTypes.NTA; }
"cache" { return JastAddAspectTypes.CACHE; }
"uncache" { return JastAddAspectTypes.UNCACHE; }
}
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment