[antlr-interest] holy crap; got java expressions working
Terence Parr
parrt at cs.usfca.edu
Thu Feb 24 18:42:47 PST 2011
did a quick trial of java expression. i'll be damned if it doesn't seem to work. sample input/output pairs below.
Ter
--------------
e : '('! e ')'!
| 'this'
| 'super'
| INT
| ID
| type '.'^ 'class'
| e '.'^ ID
| e '.'^ 'this'
| e '.'^ 'super' '('^ expressionList? ')'!
| e '.'^ 'new'^ ID '('! expressionList? ')'!
| 'new'^ type ( '(' expressionList? ')'! | (options {k=1;}:'[' e ']'!)+)
| e '['^ e ']'!
| '('^ type ')'! e
| e ('++'^ | '--'^)
| e '('^ expressionList? ')'!
| ('+'^|'-'^|'++'^|'--'^) e
| ('~'^|'!'^) e
| e ('*'^|'/'^|'%'^) e
| e ('+'^|'-'^) e
| e ('<' '<' | '>' '>' '>' | '>' '>') e
| e ('<='^ | '>='^ | '>'^ | '<'^) e
| e 'instanceof'^ e
| e ('=='^ | '!='^) e
| e '&'^ e
| e '^'<assoc=right>^ e
| e '|'^ e
| e '&&'^ e
| e '||'^ e
// | e '?' e ':' e
| e ('='<assoc=right>^
|'+='<assoc=right>^
|'-='<assoc=right>^
|'*='<assoc=right>^
|'/='<assoc=right>^
|'&='<assoc=right>^
|'|='<assoc=right>^
|'^='<assoc=right>^
|'>>='<assoc=right>^
|'>>>='<assoc=right>^
|'<<='<assoc=right>^
|'<<<='<assoc=right>^
|'%='<assoc=right>^) e
;
expressionList
: e (','! e)*
;
type: ID
| ID '['^ ']'!
| 'int'
| 'int' '['^ ']'!
;
-------------
a -> a
1 -> 1
a+1 -> (+ a 1)
a*1 -> (* a 1)
a.b -> (. a b)
a-b+c -> (+ (- a b) c)
a+b*c -> (+ a (* b c))
a.b+1 -> (+ (. a b) 1)
-a -> (- a)
-a+b -> (+ (- a) b)
-a.b -> (- (. a b))
a^b^c -> (^ a (^ b c))
a=b=c -> (= a (= b c))
a=b=c+d.e -> (= a (= b (+ c (. d e))))
a|b&c -> (| a (& b c))
(a|b)&c -> (& (| a b) c)
(T)x -> (( T x)
new A().b -> (. (new A () b)
(T)t.f() -> (( (( T (. t f)))
a.f(x)==T.c -> (== (( (. a f) x) (. T c))
a.f().g(x,1) -> (( (. (( (. a f)) g) x 1)
new T[((n-1) * x) + 1] -> (new T [ (+ (* (- n 1) x) 1))
More information about the antlr-interest
mailing list