Skip to content
Snippets Groups Projects
Select Git revision
11 results Searching

LabComm.java

Blame
  • LabCommScanner.flex 2.75 KiB
    package AST;
    
    import beaver.Symbol;
    import beaver.Scanner;
    import AST.LabCommParser.Terminals;
    
    %%
    
    %public 
    %final 
    %class LabCommScanner
    %extends Scanner
    
    %type Symbol 
    %function nextToken 
    %yylexthrow Scanner.Exception
    
    %unicode
    %line %column
    
    %{
      StringBuffer strbuf = new StringBuffer(128);
    
      private Symbol sym(short id) {
        return new Symbol(id, yyline + 1, yycolumn + 1, len(), str());
      }
    
      private Symbol sym(short id, String value) {
        return new Symbol(id, yyline + 1, yycolumn + 1, len(), value);
      }
    
      private String str() { return yytext(); }
      private int len() { return yylength(); }
    %}
    
    LineTerminator = \n|\r|\r\n
    InputCharacter = [^\r\n]
    
    WhiteSpace = [ ] | \t | \f | {LineTerminator}
    
    Comment = {TraditionalComment}
            | {EndOfLineComment}
    
    TraditionalComment = "/*" [^*] ~"*/" | "/*" "*"+ "/" | "/*" "*"+ [^/*] ~"*/"
    EndOfLineComment = "//" {InputCharacter}* {LineTerminator}?
    
    Identifier = [:jletter:][:jletterdigit:]*
    
    DecimalNumeral = 0 | {NonZeroDigit} {Digits}? 
    Digits = {Digit}+
    Digit = 0 | {NonZeroDigit}
    NonZeroDigit = [1-9]
    
    %%
    
    <YYINITIAL> {
      {WhiteSpace}                   { }
      {Comment}                      { }
    
      "sample"                       { return sym(Terminals.SAMPLE); }
      "typedef"                      { return sym(Terminals.TYPEDEF); }
      "struct"                       { return sym(Terminals.STRUCT); }
      "void"                         { return sym(Terminals.VOID); }
      "boolean"                      { return sym(Terminals.BOOLEAN); }
      "byte"                         { return sym(Terminals.BYTE); }
      "short"                        { return sym(Terminals.SHORT); }
      "int"                          { return sym(Terminals.INT); }
      "long"                         { return sym(Terminals.LONG); }
      "float"                        { return sym(Terminals.FLOAT); }
      "double"                       { return sym(Terminals.DOUBLE); }