User:J.saipratap
The following code is an attempt to the ANTLR exercise
grammar ascend0.9.7_py2.6
definitions:
/* empty */ | definition+ ;
definition:
require_file | provide_module | import | add_method_def | replace_method_def | add_notes_def | constant_def | atom_def | model_def | definition_def | patch_def | units_def | global_def ;
global_def:
GLOBAL ';' fstatements end ';' ;
require_file:
REQUIRE DQUOTE ';' | REQUIRE name ';' | REQUIRE name ;
provide_module:
PROVIDE DQUOTE ';' | PROVIDE name ';' | PROVIDE name ;
import :
IMPORT IDENTIFIER FROM DQUOTE ';' ;
add_notes_def:
add_notes_head notes_body end ';' ;
add_notes_head:
ADD NOTES IN IDENTIFIER optional_method ';' ;
add_method_def:
add_method_head proclist end ';' ;
add_method_head:
ADD METHODS IN IDENTIFIER ';' | ADD METHODS IN DEFINITION MODEL ';' ;
replace_method_def:
replace_method_head proclist end ';' ;
replace_method_head:
REPLACE METHODS IN IDENTIFIER ';' | REPLACE METHODS IN DEFINITION MODEL ';' ;
atom_def:
universal atom_head fstatements methods end ';' ;
atom_head:
atom_id REFINES IDENTIFIER dims default_val ';' ;
atom_id:
ATOM IDENTIFIER ;
default_val:
/* empty */ | DEFAULT optional_sign number | DEFAULT FALSE | DEFAULT TRUE | DEFAULT SYMBOL ;
constant_def:
universal constant_head ;
constant_head:
CONSTANT IDENTIFIER REFINES IDENTIFIER dims constant_val optional_notes ';' ;
constant_val:
/* empty */ | CASSIGN optional_sign number | CASSIGN TRUE | CASSIGN FALSE | CASSIGN SYMBOL ;
model_def:
universal model_head fstatements methods end ';' ;
model_head:
model_id optional_model_parameters optional_parameter_wheres ';' | model_id optional_model_parameters optional_parameter_wheres REFINES IDENTIFIER optional_parameter_reduction ';' ;
model_id:
MODEL IDENTIFIER ;
optional_model_parameters:
/* empty */ | '(' fstatements ')' ;
optional_parameter_wheres:
| WHERE '(' fstatements ')' ;
optional_parameter_reduction:
| '(' fstatements ')' ;
patch_def:
patch_head fstatements methods end ';' ;
patch_head:
PATCH IDENTIFIER FOR IDENTIFIER ';' ;
universal:
/* empty */ | UNIVERSAL ;
definition_def:
definition_id fstatements methods end ';' ;
definition_id:
DEFINITION IDENTIFIER ;
units_def:
units_statement ';' ;
units_statement:
UNITS unitdeflist end ;
unitdeflist:
| unitdef+ ;
unitdef:
IDENTIFIER '=' BRACEDTEXT ';' ;
methods:
/* empty */ | METHODS proclist ;
proclist:
proclistf ;
proclistf:
| procedure+ ;
procedure:
procedure_id ';' fstatements end ';' ;
procedure_id:
METHOD IDENTIFIER ;
fstatements:
statements ;
statements:
/* empty */ | statement+ ';' ;
statement:
isa_statement | willbe_statement | aliases_statement | is_statement | isrefinedto_statement | arealike_statement | arethesame_statement | willbethesame_statement | willnotbethesame_statement | assignment_statement | relation_statement | glassbox_statement | blackbox_statement | call_statement | external_statement | for_statement | run_statement | fix_statement | free_statement | assert_statement | if_statement | while_statement | when_statement | use_statement | flow_statement | select_statement | switch_statement | conditional_statement | notes_statement | units_statement ;
isa_statement:
fvarlist ISA type_identifier optional_of optional_with_value ;
willbe_statement:
fvarlist WILLBE type_identifier optional_of optional_with_value ;
aliases_statement:
fvarlist ALIASES fname | fvarlist ALIASES '(' fvarlist ')' WHERE fvarlist ISA IDENTIFIER OF IDENTIFIER optional_set_values ;
optional_set_values:
/* empty */ | WITH_VALUE_T '(' set ')' ;
is_statement:
fvarlist IS IDENTIFIER optional_of ;
isrefinedto_statement:
fvarlist ISREFINEDTO type_identifier ;
call_identifier:
IDENTIFIER | IDENTIFIER '(' set ')' ;
type_identifier:
IDENTIFIER | IDENTIFIER '(' set ')' ;
optional_method:
/* empty */ | METHOD IDENTIFIER ;
optional_of:
/* empty */ | OF IDENTIFIER ;
optional_with_value:
| WITH_VALUE_T expr ;
arealike_statement:
fvarlist AREALIKE ;
arethesame_statement:
fvarlist ARETHESAME ;
willbethesame_statement:
fvarlist WILLBETHESAME ;
willnotbethesame_statement:
fvarlist WILLNOTBETHESAME ;
assignment_statement:
fname ASSIGN expr | fname CASSIGN expr ;
relation_statement:
relation | fname ':' relation ;
relation:
expr | MINIMIZE expr | MAXIMIZE expr ;
blackbox_statement:
fname ':' IDENTIFIER '(' input_args ';' output_args data_args ')' ;
input_args:
fvarlist ':' INPUT ;
output_args:
fvarlist ':' OUTPUT ;
data_args:
/* empty */ | ';' fname ':' DATA ;
glassbox_statement:
fname ':' IDENTIFIER '(' fvarlist ';' INTEGER ')' optional_scope ;
optional_scope:
/* empty */ | IN fname ;
for_statement:
FOR IDENTIFIER IN expr optional_direction forexprend fstatements end ;
optional_direction:
/* empty */ | INCREASING | DECREASING ;
forexprend:
CREATE | EXPECT | CHECK | DO ;
run_statement:
RUN fname | RUN fname DBLCOLON fname ;
fix_statement: FIX fvarlist ;
free_statement: FREE fvarlist ;
external_statement:
EXTERNAL IDENTIFIER '(' fvarlist ')' ;
call_statement:
CALL call_identifier ;
assert_statement: ASSERT expr
;
if_statement:
IF expr THEN fstatements optional_else end ;
while_statement:
WHILE expr DO fstatements end ;
optional_else:
| ELSE fstatements ;
when_statement:
WHEN fvarlist whenlist end | fname ':' WHEN fvarlist whenlist end | WHEN '(' fvarlist ')' whenlist end | fname ':' WHEN '(' fvarlist ')' whenlist end ;
whenlist:
whenlistf ;
whenlistf:
(CASE set ':' fstatements)+ | (OTHERWISE ':' fstatements)+
;
flow_statement:
BREAK | CONTINUE | FALLTHRU | RETURN | STOP optional_bracedtext ;
use_statement:
USE fname ;
select_statement:
SELECT fvarlist selectlist end | SELECT '(' fvarlist ')' selectlist end ;
selectlist:
selectlistf ;
selectlistf:
( CASE set ':' fstatements)+ | ( OTHERWISE ':' fstatements)+ ;
switch_statement:
SWITCH fvarlist switchlist end | SWITCH '(' fvarlist ')' switchlist end ;
switchlist:
switchlistf ;
switchlistf:
( CASE set ':' fstatements)+; |( OTHERWISE ':' fstatements)+ ;
conditional_statement:
CONDITIONAL fstatements end ;
notes_statement:
NOTES notes_body end ;
notes_body:
(SYMBOL noteslist)+ ;
noteslist:
(fvarlist BRACEDTEXT)+
;
fvarlist:
varlist ;
varlist:
fname+ | fname+ ',' fname
;
fname:
name optional_notes ;
name:
IDENTIFIER | IDENTIFIER+ '.' IDENTIFIER | IDENTIFIER+ '[' set ']' ;
end:
END CONDITIONAL | END FOR | END IF | END INTERACTIVE | END METHODS | END NOTES | END SELECT | END SWITCH | END UNITS | END GLOBAL | END WHEN | END WHILE | END IDENTIFIER | END /* empty */ ;
optional_bracedtext:
/* empty */ | BRACEDTEXT ;
optional_notes:
/* empty */ | DQUOTE ;
set:
setexprlist | /* empty */ ;
setexprlist:
expr | expr DOTDOT expr setexprlist1 ;
setexprlist1:
setexprlist ',' expr | setexprlist ',' expr DOTDOT expr ;
number:
INTEGER | realnumber ;
realnumber:
REAL opunits | INTEGER BRACEDTEXT ;
opunits:
/* empty */ | BRACEDTEXT ;
dims:
DIMENSION dimensions | DIMENSIONLESS | /* empty */ ;
dimensions:
'*' | dimexpr ;
dimexpr:
IDENTIFIER | INTEGER dimexpr1;
dimexpr1:
| dimexpr '/' dimexpr | dimexpr '*' dimexpr | dimexpr '^' fraction | '(' dimexpr ')' ;
fraction:
optional_sign fractail ;
fractail:
INTEGER | '(' INTEGER '/' INTEGER ')' ;
optional_sign:
/* empty */ | '+' | '-' ;
expr:
INTEGER | MAXINTEGER | realnumber | MAXREAL | TRUE | FALSE | ANY | SYMBOL | fname | '[' set ']' | SATISFIED '(' fname ',' realnumber ')' | SATISFIED '(' fname ')' | SUM '(' set ')' | SUM '[' set ']' | PROD '(' set ')' | PROD '[' set ']' | UNION '(' set ')' | UNION '[' set ']' | INTERSECTION '(' set ')' | INTERSECTION '[' set ']' | CARD '(' set ')' | CARD '[' set ']' | CHOICE '(' set ')' | CHOICE '[' set ']'
expr1 ;
expr1 :
| expr '+' expr | expr '-' expr | expr '*' expr | expr '/' expr | expr '^' expr | expr AND expr | expr OR expr | NOT expr | expr relop expr %prec NEQ | expr logrelop expr %prec BEQ | expr IN expr | expr '|' expr | expr SUCHTHAT expr | '+' expr %prec UPLUS | '-' expr %prec UMINUS | IDENTIFIER '(' expr ')' | '(' expr ')' ;
relop:
'=' | '<' | '>' | LEQ | GEQ | NEQ ;
logrelop:
BEQ | BNE ;
%prec :'precedes';
LEQ : '<=' ; GEQ :
'>=';
NEQ :
'<>';
DOTDOT :
'..';
DBLCOLON:
'::';
ASSIGN :
':=';
CASSIGN :
':==';
BEQ : '=='; BNE : '!=';
'=' : '='; '>' : '>'; '<' : '<'; ',' : ','; '.' : '.'; : ';'; ':' : ':'; '[' : '['; ']' : ']'; '(' : '('; ')' : ')'; '+' : '+'; '-' : '-'; '*' : '*'; '/' : '/'; '^' : '^'; '|' : '|';
ADD : 'ADD'; ALIASES : 'ALIASES'; AND : 'AND'; ANY : 'ANY'; AREALIKE : 'AREALIKE'; ARETHESAME : 'ARETHESAME'; ARRAY : 'ARRAY'; ATOM : 'ATOM'; BREAK : 'BREAK'; CALL : 'CALL'; CARD : 'CARD'; CASE : 'CASE'; CHECK : 'CHECK'; CHOICE : 'CHOICE'; CONDITIONAL : 'CONDITIONAL'; CONSTANT : 'CONSTANT'; CONTINUE : 'CONTINUE'; CREATE : 'CREATE'; DATA : 'DATA'; DECREASING : 'DECREASING'; DEFAULT : 'DEFAULT'; DEFINITION : 'DEFINITION'; DIMENSION : 'DIMENSION'; DIMENSIONLESS : 'DIMENSIONLESS'; DO : 'DO'; ELSE : 'ELSE'; END : 'END'; EXPECT : 'EXPECT'; EXTERNAL : 'EXTERNAL'; FALSE : 'FALSE'; FALLTHRU : 'FALLTHROUGH'; FIX : 'FIX'; FREE : 'FREE'; FOR : 'FOR'; FROM : 'FROM'; GLOBAL : 'GLOBAL'; ASSERT : 'ASSERT'; IF : 'IF'; IMPORT : 'IMPORT'; IN : 'IN'; INCREASING : 'INCREASING'; INPUT : 'INPUT'; INTERSECTION : 'INTERSECTION'; IS : 'IS'; ISA : 'ISA'; ISREFINEDTO : 'ISREFINEDTO'; MAXIMIZE : 'MAXIMIZE'; MAXINTEGER : 'MAXINTEGER'; MAXREAL : 'MAXREAL'; METHOD : 'METHOD'; METHODS : 'METHODS'; MINIMIZE : 'MINIMIZE'; MODEL : 'MODEL'; NOT : 'NOT'; NOTES : 'NOTES'; OF : 'OF'; OR : 'OR'; OTHERWISE : 'OTHERWISE'; OUTPUT : 'OUTPUT'; PATCH : 'PATCH'; PROD : 'PROD'; PROVIDE : 'PROVIDE'; REFINES : 'REFINES'; REPLACE : 'REPLACE'; REQUIRE : 'REQUIRE'; RUN : 'RUN'; SATISFIED : 'SATISFIED'; SELECT : 'SELECT'; SUCHTHAT : 'SUCHTHAT'; SUM : 'SUM'; SIZE : 'SIZE'; SWITCH : 'SWITCH'; STOP : 'STOP'; THEN : 'THEN'; TRUE : 'TRUE'; UNION : 'UNION'; UNITS : 'UNITS'; UNIVERSAL : 'UNIVERSAL'; USE : 'USE'; VALUE : 'VALUE'; WHEN : 'WHEN'; WHERE : 'WHERE'; WHILE : 'WHILE'; WILLBE : 'WILLBE'; WILLBETHESAME : 'WILLBETHESAME'; WILLNOTBETHESAME: 'WILLNOTBETHESAME'; WITH : 'WITH'; WITH_VALUE_T : 'WITHVALUE';
SYMBOL
: '\ | ~('\n')*';
IDENTIFIER : ('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
INTEGER : '0'..'9'+; REAL : ('0'..'9')+ '.' ('0'..'9')* EXPONENT? | '.' ('0'..'9')+ EXPONENT? | ('0'..'9')+ EXPONENT ;
BRACEDTEXT : '{' ( '('+ ')'+)| ('{'+ '}'+) '}';
EXPONENT : ('e'|'E') ('+'|'-')? ('0'..'9')+ ; DQUOTE : '"' ;
UPLUS : '+' ; UMINUS : '-' ; RETURN : 'RETURN' ; INTERACTIVE : 'INTERACTIVE';