Skip to content
Snippets Groups Projects
Select Git revision
  • 2a454d57ef2268dfcbb75e796437e4adc249575f
  • master default protected
2 results

CMakeLists.txt

Blame
  • Forked from CeTI / ROS / ROS Packages / sample_applications
    Source project has a limited visibility.
    Aspect.flex 12.56 KiB
    package org.jastadd.tooling.aspect.lexer;
    
    import com.intellij.lexer.FlexLexer;
    import com.intellij.psi.tree.IElementType;
    import org.jastadd.tooling.aspect.psi.AspectTypes;
    import com.intellij.psi.TokenType;
    
    %%
    
    %class AspectLexer
    %implements FlexLexer
    %unicode
    %function advance
    %type IElementType
    %eof{  return;
    %eof}
    
    %{
      private int counter = 0;
    %}
    
    WhiteSpace          = [ \t\n\r\f]
    
    // TODO what is /**/ in Java? Is this caputered here?
    SingleLineComment   = "//"  [^\n\r]* (\n | \r | \r\n)
    FormalComment       = "/**" [^*]* [*]+([^*/][^*]*[*]+)*[/]
    MultiLineComment    = "/*"  [^*]+ [*]+([^*/][^*]*[*]+)*[/]
    
    
    NotBrace          = ( [^{}/]+ | [/][^{}/*] )+
    NotBracket        = ( [^\[\]/]+ | [/][^\[\]/*] )+
    
    // from jjt
    DecimalLiteral    = [1-9] [0-9]*
    HexLiteral        = 0 [xX] [0-9a-fA-F]+
    OctalLiteral      = 0 [0-7]*
    IntegerLiteral    = ( {DecimalLiteral} | {HexLiteral} | {OctalLiteral} ) [lL]?
    
    Exponent             = [eE] [+-]? [0-9]+
    FloatingPointLiteral = [0-9]+ "." [0-9]* {Exponent}? [fFdD]?
                         |        "." [0-9]+ {Exponent}? [fFdD]?
                         |            [0-9]+ {Exponent}  [fFdD]?
                         |            [0-9]+ {Exponent}? [fFdD]
    
    CharacterLiteral     = '  ( [^'\\\n\r]  | ( \\ ( [ntbrf\\'\"] | [0-7][0-7?] | [0-3][0-7][0-7] ) ) ) '
    StringLiteral        = \" ( [^\"\\\n\r] | ( \\ ( [ntbrf\\'\"] | [0-7][0-7?] | [0-3][0-7][0-7] ) ) )* \"
    
    Identifier           = [:jletter:] [:jletterdigit:]*
    
    %state JASTADD
    %state EXPECT_CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE
    %state CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE
    %state LBRACE_ANYTHING_RBRACE
    %state LBRACKET_ANYTHING_RBRACKET
    %state JAVA_IN_PAREN
    %state COLLECTION_DECL
    %state ATTRIBUTE_DEFINITION
    %state LPAREN_ANYTHING_RPAREN
    
    %%
    
    <YYINITIAL,COLLECTION_DECL,ATTRIBUTE_DEFINITION> {
      {WhiteSpace}+                  { return TokenType.WHITE_SPACE; }
      {SingleLineComment}            { return AspectTypes.SINGLE_LINE_COMMENT; }
      {FormalComment}                { return AspectTypes.FORMAL_COMMENT; }
      {MultiLineComment}             { return AspectTypes.MULTI_LINE_COMMENT; }
    //  "EQ"                           { yybegin(YYINITIAL); return AspectTypes.EQ; }
    //  "{"                            { yybegin(JAVA); counter = 1;  }
      "class"                        { yybegin(EXPECT_CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE); }
    }
    
    <EXPECT_CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE> {
      "{"                            { yybegin(CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE); counter = 1;  }
      {NotBrace}                     {} // skip over everything
    }
    
    <CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE> {
      {SingleLineComment}            {}
      {FormalComment}                {}
      {MultiLineComment}             {}
      {CharacterLiteral}             {}
      {StringLiteral}                {}
      "{"                            { counter++; }
      "}"                            { counter--; if (counter==0) { yybegin(YYINITIAL); return AspectTypes.CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE; } }
      {NotBrace}                     {}
    }
    
    <LBRACE_ANYTHING_RBRACE> {
      {SingleLineComment}            {}
      {FormalComment}                {}
      {MultiLineComment}             {}
      {CharacterLiteral}             {}
      {StringLiteral}                {}
      "{"                            { counter++; }
      "}"                            { counter--; if (counter==0) { yybegin(YYINITIAL); return AspectTypes.LBRACE_ANYTHING_RBRACE; } }
      {NotBrace}                     {}
    }
    
    <LBRACKET_ANYTHING_RBRACKET> {
      {SingleLineComment}            {}
      {FormalComment}                {}
      {MultiLineComment}             {}
      {CharacterLiteral}             {}
      {StringLiteral}                {}
      "["                            { counter++; System.out.println("<INC>"); }
      "]"                            { System.out.println("<DEC>"); counter--; if (counter==0) { System.out.println("<EXIT>"); yybegin(COLLECTION_DECL); return AspectTypes.LBRACKET_ANYTHING_RBRACKET; } }
      {NotBracket}                   {System.out.println("<NB>" + yytext());}
    }
    
    <YYINITIAL,COLLECTION_DECL,ATTRIBUTE_DEFINITION> {
      "abstract"                    { return AspectTypes.ABSTRACT; }
    //"assert"                      { return AspectTypes.ASSERT; }
      "boolean"                     { return AspectTypes.BOOLEAN; }
    //"break"                       { return AspectTypes.BREAK; }
      "byte"                        { return AspectTypes.BYTE; }
    //"case"                        { return AspectTypes.CASE; }
    //"catch"                       { return AspectTypes.CATCH; }
      "char"                        { return AspectTypes.CHAR; }
    //"class"                       { return AspectTypes.CLASS; }
    //"const"                       { return AspectTypes.CONST; }
    //"continue"                    { return AspectTypes.CONTINUE; }
    //"default"                     { return AspectTypes._DEFAULT; }
    //"do"                          { return AspectTypes.DO; }
      "double"                      { return AspectTypes.DOUBLE; }
    //"else"                        { return AspectTypes.ELSE; }
    //"enum"                        { return AspectTypes.ENUM; }
      "extends"                     { return AspectTypes.EXTENDS; }
      "false"                       { return AspectTypes.FALSE; }
      "final"                       { return AspectTypes.FINAL; }
    //"finally"                     { return AspectTypes.FINALLY; }
      "float"                       { return AspectTypes.FLOAT; }
      "for"                         { return AspectTypes.FOR; }
    //"goto"                        { return AspectTypes.GOTO; }
    //"if"                          { return AspectTypes.IF; }
      "implements"                  { return AspectTypes.IMPLEMENTS; }
      "import"                      { return AspectTypes.IMPORT; }
      "instanceof"                  { return AspectTypes.INSTANCEOF; }
      "int"                         { return AspectTypes.INT; }
      "interface"                   { return AspectTypes.INTERFACE; }
      "long"                        { return AspectTypes.LONG; }
      "native"                      { return AspectTypes.NATIVE; }
      "new"                         { return AspectTypes.NEW; }
      "null"                        { return AspectTypes.NULL; }
    //"package"                     { return AspectTypes.PACKAGE; }
      "private"                     { return AspectTypes.PRIVATE; }
      "protected"                   { return AspectTypes.PROTECTED; }
      "public"                      { return AspectTypes.PUBLIC; }
    //"return"                      { return AspectTypes.RETURN; }
      "short"                       { return AspectTypes.SHORT; }
      "static"                      { return AspectTypes.STATIC; }
      "strictfp"                    { return AspectTypes.STRICTFP; }
      "super"                       { return AspectTypes.SUPER; }
    //"switch"                      { return AspectTypes.SWITCH; }
      "synchronized"                { return AspectTypes.SYNCHRONIZED; }
      "this"                        { return AspectTypes.THIS; }
    //"throw"                       { return AspectTypes.THROW; }
      "throws"                      { return AspectTypes.THROWS; }
      "transient"                   { return AspectTypes.TRANSIENT; }
      "true"                        { return AspectTypes.TRUE; }
    //"try"                         { return AspectTypes.TRY; }
      "void"                        { return AspectTypes.VOID; }
      "volatile"                    { return AspectTypes.VOLATILE; }
    //"while"                       { return AspectTypes.WHILE; }
    
      // JastAdd
      "inh"                         { yybegin(ATTRIBUTE_DEFINITION); return AspectTypes.INH; }
      "syn"                         { yybegin(ATTRIBUTE_DEFINITION); return AspectTypes.SYN; }
      "lazy"                        { return AspectTypes.LAZY; }
      "rewrite"                     { return AspectTypes.REWRITE; }
      "to"                          { return AspectTypes.TO; }
      "when"                        { return AspectTypes.WHEN; }
      "aspect"                      { return AspectTypes.ASPECT; }
      "eq"                          { yybegin(ATTRIBUTE_DEFINITION); return AspectTypes.EQUATION; }
      "circular"                    { return AspectTypes.CIRCULAR; }
      "refine"                      { return AspectTypes.REFINE; }
      "contributes"                 { return AspectTypes.CONTRIBUTES; }
      "each"                        { return AspectTypes.EACH; }
      "nta"                         { return AspectTypes.NTA; }
      "cache"                       { return AspectTypes.CACHE; }
      "uncache"                     { return AspectTypes.UNCACHE; }
    
      // TODO this is strangely split in another Token block, check semantics of JJTree file!
      "coll"                        { yybegin(COLLECTION_DECL); return AspectTypes.COLL; }
    
    }
    
    <COLLECTION_DECL> {
      "with"                        { return AspectTypes.WITH; }
      "root"                        { return AspectTypes.ROOT; }
      "["                           { yybegin(LBRACKET_ANYTHING_RBRACKET); System.out.println("<ENTER>"); counter = 1; }
    }
    
    <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 AspectTypes.SEMICOLON; }
    }
    
    <YYINITIAL,COLLECTION_DECL,ATTRIBUTE_DEFINITION> {
      // LITERALS
      {IntegerLiteral}              { return AspectTypes.INTEGER_LITERAL; }
      {FloatingPointLiteral}        { return AspectTypes.FLOATING_POINT_LITERAL; }
      {CharacterLiteral}            { return AspectTypes.CHARACTER_LITERAL; }
      {StringLiteral}               { return AspectTypes.STRING_LITERAL; }
    
      // IDENTIFIERS
      {Identifier}                  { return AspectTypes.IDENTIFIER; }
    
      // COMBINED TOKENS
      ".class"                      { return AspectTypes.DOT_CLASS; }
    
      // SEPARATORS
    
      "("                           { return AspectTypes.LPAREN; }
      ")"                           { return AspectTypes.RPAREN; }
      "{"                           { return AspectTypes.LBRACE; }
      "}"                           { return AspectTypes.RBRACE; }
      "["                           { return AspectTypes.LBRACKET; }
      "]"                           { return AspectTypes.RBRACKET; }
    
      ";"                           { return AspectTypes.SEMICOLON; }
      ","                           { return AspectTypes.COMMA; }
      "."                           { return AspectTypes.DOT; }
    //"@"                           { return AspectTypes.AT; }
    
      // OPERATORS
      "="                           { return AspectTypes.ASSIGN; }
      "<"                           { return AspectTypes.LT; }
      "!"                           { return AspectTypes.BANG; }
      "~"                           { return AspectTypes.TILDE; }
      "?"                           { return AspectTypes.QUESTIONMARK; }
      ":"                           { return AspectTypes.COLON; }
      "=="                          { return AspectTypes.EQ; }
      "<="                          { return AspectTypes.LE; }
      ">="                          { return AspectTypes.GE; }
      "!="                          { return AspectTypes.NE; }
      "||"                          { return AspectTypes.SC_OR; }
      "&&"                          { return AspectTypes.SC_AND; }
      "++"                          { return AspectTypes.INCR; }
      "--"                          { return AspectTypes.DECR; }
      "+"                           { return AspectTypes.PLUS; }
      "-"                           { return AspectTypes.MINUS; }
      "*"                           { return AspectTypes.STAR; }
      "/"                           { return AspectTypes.SLASH; }
      "&"                           { return AspectTypes.BIT_AND; }
      "|"                           { return AspectTypes.BIT_OR; }
      "^"                           { return AspectTypes.XOR; }
      "%"                           { return AspectTypes.REM; }
      "<<"                          { return AspectTypes.LSHIFT; }
      "+="                          { return AspectTypes.PLUSASSIGN; }
      "-="                          { return AspectTypes.MINUSASSIGN; }
      "*="                          { return AspectTypes.STARASSIGN; }
      "/="                          { return AspectTypes.SLASHASSIGN; }
      "&="                          { return AspectTypes.ANDASSIGN; }
      "|="                          { return AspectTypes.ORASSIGN; }
      "^="                          { return AspectTypes.XORASSIGN; }
      "%="                          { return AspectTypes.REMASSIGN; }
      "<<="                         { return AspectTypes.LSHIFTASSIGN; }
      ">>="                         { return AspectTypes.RSIGNEDSHIFTASSIGN; }
      ">>>="                        { return AspectTypes.RUNSIGNEDSHIFTASSIGN; }
    //"..."                         { return AspectTypes.ELLIPSIS; }
      "->"                          { return AspectTypes.ARROW; }
      "::"                          { return AspectTypes.DOUBLECOLON; }
    
      // TODO RUNSIGNEDSHIFT >>> and RSIGNEDSHIFT >> are not parsed
    
      ">"                           { return AspectTypes.GT; }
    }