java help

profilegen_1
java-compiler.zip

java compiler/Compiler1.java

java compiler/Compiler1.java


import  org . antlr . runtime . ANTLRStringStream ;
import  org . antlr . runtime . CharStream ;
import  org . antlr . runtime . CommonTokenStream ;
import  org . antlr . runtime . RecognitionException ;
import  org . antlr . runtime . TokenStream ;

public   class   Test1   {
     public   static   void  main ( String []  args )   throws   RecognitionException   {
         CharStream  stream  =
             new   ANTLRStringStream ( "program XLSample1 =\r\n"   +
                     "/*\r\n"   +
                     "   constant one : Integer := 1;\r\n"   +
                     "   constant two : Integer := 2 * 3;\r\n"   +
                     "   var x,         y, z : Integer := 42;\r\n"   +
                     "*/\r\n"   +
                     "\r\n"   +
                     "   procedure foo() =\r\n"   +
                     "       var x : Integer := 2;\r\n"   +
                     "   begin\r\n"   +
                     "   end foo.\r\n"   +
                     "   procedure fee(y : Integer) =\r\n"   +
                     "       var x : Integer := 2;\r\n"   +
                     "   begin\r\n"   +
                     "   end fee.\r\n"   +
                     "   function fie(y : Integer) : Integer =\r\n"   +
                     "       var x : Integer := 2;\r\n"   +
                     "   begin\r\n"   +
                     "       return y;\r\n"   +
                     "   end fie.\r\n"   +
                     "begin\r\n"   +
                     "end XLSample1." );
         SampleLexer  lexer  =   new   SampleLexer ( stream );
         TokenStream  tokenStream  =   new   CommonTokenStream ( lexer );
         SampleParser  parser  =   new   SampleParser ( tokenStream );
        parser . program ();
         System . out . println ( "ok" );
     }
}

java compiler/Compiler2.java

java compiler/Compiler2.java


import  org . antlr . runtime . ANTLRStringStream ;
import  org . antlr . runtime . CharStream ;
import  org . antlr . runtime . CommonTokenStream ;
import  org . antlr . runtime . RecognitionException ;
import  org . antlr . runtime . TokenStream ;

public   class   Test2   {
     public   static   void  main ( String []  args )   throws   RecognitionException   {
         CharStream  stream  =
             new   ANTLRStringStream ( "3  * (2 + 4) * 3" );
         Sample2Lexer  lexer  =   new   Sample2Lexer ( stream );
         TokenStream  tokenStream  =   new   CommonTokenStream ( lexer );
         Sample2Parser  parser  =   new   Sample2Parser ( tokenStream );
         int  result  =  parser . evaluator ();
         System . out . println ( "ok - result is "   +  result );
     }
}

java compiler/src1.g4

grammar scr1; options { language = Java; } @header { package a.b.c; } @lexer::header { package a.b.c; } program : 'program' IDENT '=' (constant | variable | function | procedure | typeDecl)* 'begin' statement* 'end' IDENT '.' ; constant : 'constant' IDENT ':' type ':=' expression ';' ; variable : 'var' IDENT (',' IDENT)* ':' type (':=' expression)? ';' ; type : 'Integer' | 'Boolean' | 'String' | 'Char' | IDENT | typeSpec ; typeDecl : 'type' IDENT '=' typeSpec ';' ; typeSpec : arrayType | recordType | enumType ; arrayType : 'array' '[' INTEGER '..' INTEGER ']' 'of' type ; recordType : 'record' field* 'end' 'record' ; field : IDENT ':' type ';' ; enumType : '<' IDENT (',' IDENT)* '>' ; statement : assignmentStatement | ifStatement | loopStatement | whileStatement | procedureCallStatement ; procedureCallStatement : IDENT '(' actualParameters? ')' ';' ; actualParameters : expression (',' expression)* ; ifStatement : 'if' expression 'then' statement+ ('elsif' expression 'then' statement+)* ('else' statement+)? 'end' 'if' ';' ; assignmentStatement : IDENT ':=' expression ';' ; exitStatement : 'exit' 'when' expression ';' ; whileStatement : 'while' expression 'loop' (statement|exitStatement)* 'end' 'loop' ';' ; loopStatement : 'loop' (statement|exitStatement)* 'end' 'loop' ';' ; returnStatement : 'return' expression ';' ; procedure : 'procedure' IDENT '(' parameters? ')' '=' (constant | variable)* 'begin' statement* 'end' IDENT '.' ; function : 'function' IDENT '(' parameters? ')' ':' type '=' (constant | variable)* 'begin' (statement|returnStatement)* 'end' IDENT '.' ; parameters : parameter (',' parameter)* ; parameter : 'var'? IDENT ':' type ; // expressions -- fun time! term : IDENT | '(' expression ')' | INTEGER | STRING_LITERAL | CHAR_LITERAL | IDENT '(' actualParameters ')' ; negation : 'not'* term ; unary : ('+' | '-')* negation ; mult : unary (('*' | '/' | 'mod') unary)* ; add : mult (('+' | '-') mult)* ; relation : add (('=' | '/=' | '<' | '<=' | '>=' | '>') add)* ; expression : relation (('and' | 'or') relation)* ; MULTILINE_COMMENT : '/*' .* '*/' {$channel = HIDDEN;} ; STRING_LITERAL : '"' { StringBuilder b = new StringBuilder(); } ( '"' '"' { b.appendCodePoint('"');} | c=~('"'|'\r'|'\n') { b.appendCodePoint(c);} )* '"' { setText(b.toString()); } ; CHAR_LITERAL : '\'' . '\'' {setText(getText().substring(1,2));} ; fragment LETTER : ('a'..'z' | 'A'..'Z') ; fragment DIGIT : '0'..'9'; INTEGER : DIGIT+ ; IDENT : LETTER (LETTER | DIGIT)*; WS : (' ' | '\t' | '\n' | '\r' | '\f')+ {$channel = HIDDEN;}; COMMENT : '//' .* ('\n'|'\r') {$channel = HIDDEN;};

java compiler/src2.g4

grammar src2; options { language = Java; } @header { package a.b.c; } @lexer::header { package a.b.c; } evaluator returns [int result] : expression EOF { $result = $expression.result; } ; // expressions -- fun time! term returns [int result] : IDENT {$result = 0;} | '(' expression ')' {$result = $expression.result;} | INTEGER {$result = Integer.parseInt($INTEGER.text);} ; unary returns [int result] : { boolean positive = true; } ('+' | '-' { positive = !positive; })* term { $result = $term.result; if (!positive) $result = -$result; } ; mult returns [int result] : op1=unary { $result = $op1.result; } ( '*' op2=unary { $result = $result * $op2.result; } | '/' op2=unary { $result = $result / $op2.result; } | 'mod' op2=unary { $result = $result \% $op2.result; } )* ; expression returns [int result] : op1=mult { $result = $op1.result; } ( '+' op2=mult { $result = $result + $op2.result; } | '-' op2=mult { $result = $result - $op2.result; } )* ; MULTILINE_COMMENT : '/*' .* '*/' {$channel = HIDDEN;} ; STRING_LITERAL : '"' { StringBuilder b = new StringBuilder(); } ( '"' '"' { b.appendCodePoint('"');} | c=~('"'|'\r'|'\n') { b.appendCodePoint(c);} )* '"' { setText(b.toString()); } ; CHAR_LITERAL : '\'' . '\'' {setText(getText().substring(1,2));} ; fragment LETTER : ('a'..'z' | 'A'..'Z') ; fragment DIGIT : '0'..'9'; INTEGER : DIGIT+ ; IDENT : LETTER (LETTER | DIGIT)*; WS : (' ' | '\t' | '\n' | '\r' | '\f')+ {$channel = HIDDEN;}; COMMENT : '//' .* ('\n'|'\r') {$channel = HIDDEN;};