source: proto/pablo/input/grammar/antlr/pablo.g @ 2658

Last change on this file since 2658 was 2658, checked in by ksherdy, 7 years ago

Shortened variable names for sanity.

File size: 4.3 KB
Line 
1// Author:                      Ken Herdy
2// Date Created:        Sept. 1, 2012
3// Description:         Pablo grammar. Deprecated Grammar. See pablo scatter grammar.
4
5grammar pablo;
6
7options {
8  language = Java;
9}
10
11@header {
12        package ca.sfu.costar.pablo.parser;
13}
14@members {}
15
16@lexer::header {
17        package ca.sfu.costar.pablo.parser;
18}
19
20program
21                                : (typeDef)* (typeDecl)* (functionDef)*
22                                ;
23                       
24// t y p e   d e f i n i t i o n                       
25typeDef
26                                : TYPEDEF typeSpecifier identifier TERMINATOR
27                                ;
28                       
29// t y p e   d e c l a r a t i o n                     
30typeDecl
31                                : typeSpecifier TERMINATOR
32                                ;
33
34// f u n c t i o n   d e f i n i t i o n                                                               
35functionDef
36                                : FUNCTION functionReturnTypeSpecifier functionName LROUND parameterList? RROUND blockStmt 
37                                ;                               
38                                                                       
39functionReturnTypeSpecifier
40        : typeSpecifier | VOID
41        ;
42                                                                                                               
43functionName
44                                : identifier
45                                ;
46                                                                                                               
47parameterList
48                                : parameter (COMMA parameter)*
49                                ;
50
51parameter
52                                : typeSpecifier parameterName
53                                ;
54                               
55parameterName
56                                : identifier
57                                ;
58
59blockStmt
60                                : LCURLY StmtList RCURLY
61                                ;
62
63StmtList
64                                : Stmt*
65                                ;
66
67// s t a t e m e n t s
68Stmt   
69                                : (variableDefinition | assignmentStmt | ifStmt | functionCall | whileStmt | returnStmt) (TERMINATOR)?
70                                ;
71                                       
72variableDefinition
73                                : typeSpecifier variableName (assignmentOperator expression)?
74                                ;
75                               
76variableName
77                                :       identifier
78                                ;
79                                       
80assignmentStmt
81                                : compoundVariable assignmentOperator expression
82                                ;
83
84compoundVariable
85                                : identifier (DOT identifier)*
86                                ;
87
88assignmentOperator
89                                : ASSIGN | AND_ASSIGN | OR_ASSIGN | NOT_ASSIGN | XOR_ASSIGN 
90                                ;
91                               
92ifStmt
93                                : IF LROUND expression RROUND blockStmt (ELSE blockStmt)?
94                                ;
95
96functionCall
97                                : compoundVariable LROUND expressionList? RROUND
98                                ;
99                               
100whileStmt
101                                : WHILE LROUND expression RROUND DO blockStmt   
102                                ;
103
104returnStmt
105                                : RETURN identifier // expression ?
106                                ;
107
108// e x p r e s s i o n s
109expression             
110                                :       expression1 ((OR|XOR) expression)?
111                                ;
112                               
113expression1
114                                : expression2 ((AND) expression1)?
115                                ;
116                               
117expression2
118                                : (NOT)? expression3
119                                ;
120                               
121expression3
122                                : LROUND expression RROUND
123                                | variableFunctionTuple
124                                | constant
125                                ;
126
127variableFunctionTuple
128                                : compoundVariable (functionTail | tupleTail)? // TODO - Refer to Pablo grammar.
129                                ;
130                               
131functionTail
132                                : LROUND expressionList? RROUND
133                                ;
134                               
135expressionList
136                                : expression (COMMA expression)*
137                                ;
138                               
139tupleTail
140                                : LSQUARE index RSQUARE
141                                ;
142                               
143index                   : INTEGER_CONST
144                                ;                               
145
146constant
147                                : INTEGER_CONST // '-1' | '0' // 'AllOnes' | 'AllZeroes'
148                                | SQ_STRING
149                                | DQ_STRING
150                                ;
151
152identifier : IDENTIFIER ;
153
154// t y p e s
155typeSpecifier           
156                                : streamTypeSpecifier | structTypeSpecifier | tupleTypeSpecifier | identifier
157                                ;
158
159streamTypeSpecifier
160                                : STREAM (LANGLE INTEGER_CONST RANGLE)? // default of field width 1                     
161                                ;
162       
163structTypeSpecifier     
164                                : STRUCT identifier (LCURLY structTypeSpecifierBody RCURLY)?
165                                ;
166                               
167structTypeSpecifierBody
168                                : structMember TERMINATOR (structMember TERMINATOR)*
169                                ;
170                               
171structMember
172                                : typeSpecifier structMemberName
173                                ;
174
175structMemberName
176                                :       identifier
177                                ;
178
179tupleTypeSpecifier
180                                : TUPLE IDENTIFIER (LROUND typeSpecifier (COMMA typeSpecifier)* RROUND)?
181                                ;
182
183// t o k e n s
184IF      : 'if'      ;
185ELSE    : 'else'    ;
186WHILE   : 'while'   ;
187DO      : 'do'      ;
188RETURN  : 'return'  ;
189
190AND   : '&' ;
191OR    : '|' ;
192NOT   : '~' ;
193XOR   : '^' ;
194
195ASSIGN      : '='  ;
196AND_ASSIGN  : '&=' ;
197OR_ASSIGN   : '|=' ;
198NOT_ASSIGN  : '~=' ;
199XOR_ASSIGN  : '^=' ;
200
201LANGLE          : '<' ;
202RANGLE          : '>' ;
203LCURLY          : '{' ;
204RCURLY          : '}' ;
205LSQUARE         : '[' ;
206RSQUARE         : ']' ;
207LROUND          : '(' ;
208RROUND          : ')' ;
209COMMA           : ',' ;
210TERMINATOR  : ';' ;
211DOT                     : '.' ;
212SQUOTE          : '\'' ;
213
214TYPEDEF       : 'typedef'       ;
215FUNCTION      : 'function';     
216STREAM        : 'stream'  ;
217STRUCT        : 'struct'  ;
218TUPLE         : 'tuple'   ;
219VOID          : 'void'    ;
220
221SQ_STRING               : '\'' ('a'..'z' | 'A'..'Z'| '0'..'9' | ' ' | '-')* '\'';
222DQ_STRING               : '"' ('a'..'z' | 'A'..'Z'| '0'..'9' | ' ' | '-')* '"';
223IDENTIFIER              : ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z'| '0'..'9' | '_')*;
224INTEGER_CONST   : ('0'..'9')+;
225   
226WhiteSpace // Tab, vertical tab, form feed, space, non-breaking space and any other unicode "space separator".
227        : ('\n' | '\t' | '\v' | '\f' | ' ' | '\u00A0')  {$channel=HIDDEN;}
228        ;
229
230       
Note: See TracBrowser for help on using the repository browser.