1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/*
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * [The "BSD licence"]
3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Copyright (c) 2011 Terence Parr
4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * All rights reserved.
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *
6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Conversion to C#:
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Copyright (c) 2011 Sam Harwell, Pixel Mine, Inc.
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * All rights reserved.
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Redistribution and use in source and binary forms, with or without
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * modification, are permitted provided that the following conditions
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * are met:
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 1. Redistributions of source code must retain the above copyright
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *    notice, this list of conditions and the following disclaimer.
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 2. Redistributions in binary form must reproduce the above copyright
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *    notice, this list of conditions and the following disclaimer in the
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *    documentation and/or other materials provided with the distribution.
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 3. The name of the author may not be used to endorse or promote products
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *    derived from this software without specific prior written permission.
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvergrammar TestExpressionFeatures;
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveroptions {
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    language=CSharp3;
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    TokenLabelType=CommonToken;
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    output=AST;
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ASTLabelType=CommonTree;
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}
41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvertokens {
43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	LPAREN = '(';
44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	RPAREN = ')';
45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	DOT = '.';
46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	LBRACK = '[';
47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	RBRACK = ']';
48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	INC = '++';
49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	DEC = '--';
50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	PLUS = '+';
51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	MINUS = '-';
52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	TILDE = '~';
53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	NOT = '!';
54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	//LSHIFT = '<<';
55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	//RSHIFT = '>>';
56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	//RUSHIFT = '>>>';
57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	EQUALS = '==';
58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	NOTEQ = '!=';
59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	MOD = '%';
60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	CARET = '^';
61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	GT = '>';
62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	LT = '<';
63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	GE = '>=';
64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	LE = '<=';
65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	BITAND = '&';
66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	BITOR = '|';
67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	AND = '&&';
68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	OR = '||';
69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	KW_THIS = 'this';
71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	KW_SUPER = 'super';
72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	KW_CLASS = 'class';
73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	KW_NEW = 'new';
74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	KW_INSTANCEOF = 'instanceof';
75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	KW_INT = 'int';
76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}
77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver@lexer::namespace{Antlr3.Runtime.Test}
79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver@parser::namespace{Antlr3.Runtime.Test}
80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver@parser::header{using Console = System.Console;}
82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/*
84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Parser Rules
85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */
86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverpublic
88324c4644fee44b9898524c09511bd33c3f12e2dfBen GruvercompileUnit
89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    :   e EOF
90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ;
91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvere   :   '('! e ')'!
93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   'this'
94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   'super'
95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   INT
96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   ID
97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   type '.'^ 'class'
98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   e '.'^ ID
99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   e '.'^ 'this'
100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   e '.'^ 'super' '('^ expressionList? ')'!
101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   e '.'^ 'new'^ ID '('! expressionList? ')'!
102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |	'new'^ type ( '(' expressionList? ')'! | (options {k=1;}:'[' e ']'!)+)
103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   e '['^ e ']'!
104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   '('^ type ')'! e
105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   e ('++'^ | '--'^)
106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   e '('^ expressionList? ')'!
107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   ('+'^|'-'^|'++'^|'--'^) e
108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   ('~'^|'!'^) e
109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   e ('*'^|'/'^|'%'^) e
110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   e ('+'^|'-'^) e
111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   e ('<' '<' | '>' '>' '>' | '>' '>') e
112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   e ('<='^ | '>='^ | '>'^ | '<'^) e
113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   e 'instanceof'^ e
114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   e ('=='^ | '!='^) e
115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   e '&'^ e
116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   e '^'<assoc=right>^ e
117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   e '|'^ e
118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   e '&&'^ e
119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   e '||'^ e
120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//    |   e '?' e ':' e
121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    |   e ('='<assoc=right>^
122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver          |'+='<assoc=right>^
123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver          |'-='<assoc=right>^
124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver          |'*='<assoc=right>^
125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver          |'/='<assoc=right>^
126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver          |'&='<assoc=right>^
127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver          |'|='<assoc=right>^
128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver          |'^='<assoc=right>^
129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver          |'>>='<assoc=right>^
130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver          |'>>>='<assoc=right>^
131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver          |'<<='<assoc=right>^
132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver          |'<<<='<assoc=right>^
133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver          |'%='<assoc=right>^) e
134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ;
135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
136324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverexpressionList
137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	:	e (','! e)*
138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	;
139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvertype: ID
141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	| ID '['^ ']'!
142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	| 'int'
143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	| 'int' '['^ ']'!
144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	;
145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/*
147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Lexer Rules
148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */
149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
150324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverWS
151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    :   (' ' | '\t' | '\n' | '\r') {Skip();}
152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    ;
153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
154324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverID
155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	:	('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '0'..'9' | '_')*
156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	;
157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
158324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverINT
159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	:	'0'..'9'+
160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	;
161