Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
J
jetbrains-plugin
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
JastAdd
jetbrains-plugin
Commits
63f0177a
Commit
63f0177a
authored
4 years ago
by
Johannes Mey
Browse files
Options
Downloads
Patches
Plain Diff
parse "lakes" somehow
parent
cf0f2201
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/main/grammar/JastAddAspect.bnf
+11
-10
11 additions, 10 deletions
src/main/grammar/JastAddAspect.bnf
src/main/grammar/JastAddAspect.flex
+58
-27
58 additions, 27 deletions
src/main/grammar/JastAddAspect.flex
with
69 additions
and
37 deletions
src/main/grammar/JastAddAspect.bnf
+
11
−
10
View file @
63f0177a
...
...
@@ -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
...
...
This diff is collapsed.
Click to expand it.
src/main/grammar/JastAddAspect.flex
+
58
−
27
View file @
63f0177a
...
...
@@ -27,7 +27,7 @@ FormalComment = "/**" [^*]* [*]+([^*/][^*]*[*]+)*[/]
MultiLineComment = "/*" [^*]+ [*]+([^*/][^*]*[*]+)*[/]
Not
Parenthesis
= [^{}]+
Not
Brace
=
(
[^{}
/
]+
| [/][^{}/*] )*
// 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; }
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment