java help
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;};