t3x/t3x9r3-extended/t3x.bnf

222 lines
2.9 KiB
BNF

%token SYMBOL, INTEGER, CHARACTER, STRING
%token VAR, CONST, STRUCT, DECL, DO, END
%token IF, IE, ELSE, WHILE, FOR, LEAVE, LOOP,
%token RETURN, HALT, MODULO
%%
Program:
Declarations CompoundStmt
;
Declarations:
Declaration
| Declaration Declarations
;
Declaration:
VAR VarList ';'
| CONST ConstList ';'
| DECL DeclList ';'
| STRUCT SYMBOL '=' StructMembers ';'
| FunctionDecl
;
VarList:
SYMBOL
| SYMBOL '[' ConstValue ']'
| VarList ',' SYMBOL
;
ConstList:
ConstDef
| ConstDef ',' ConstList
;
ConstDef:
SYMBOL '=' ConstValue
;
DeclList:
Decl
| Decl ',' DeclList
;
Decl:
SYMBOL '(' ConstValue ')'
;
StructMembers:
SYMBOL
| SYMBOL ',' StructMembers ';'
;
FunctionDecl:
SYMBOL '(' OptFormalArgs ')' Statement
;
OptFormalArgs:
| ArgumentList
;
ArgumentList:
SYMBOL
| SYMBOL ',' ArgumentList
;
Statement:
CompoundStmt
| SYMBOL ':=' Expression ';'
| SYMBOL Subscripts ':=' Expression ';'
| FunctionCall
| IF '(' Expression ')' Statement
| IE '(' Expression ')' Statement
ELSE Statement
| WHILE '(' Expression ')' Statement
| FOR '(' SYMBOL '=' Expression ','
Expression ')'
Statement
| FOR '(' SYMBOL '=' Expression ','
Expression,
ConstValue ')'
Statement
| LEAVE ';'
| LOOP ';'
| RETURN Expression ';'
| HALT ConstValue ';'
| ';'
;
CompoundStmt:
DO END
| DO LocalDecls END
| DO StatementList END
| DO LocalDecls StatementList END
;
LocalDecls:
LocalDecl
| LocalDecl LocalDecls
;
LocalDecl:
VAR VarList ';'
| CONST ConstList ';'
| STRUCT SYMBOL '=' StructMembers ';'
;
StatementList:
Statement
| Statement StatementList
;
ExprList:
Expression
| Expression ',' ExprList
;
Expression:
Disjunction
| Disjunction '->' Expression ':' Expression
;
Disjunction:
Conjunction
| Conjunction '/\\' Disjunction
;
Conjunction:
Equation
| Equation '\\/' Conjunction
;
Equation:
Relation
| Relation '=' Equation
| Relation '\\=' Equation
;
Relation:
BitOperation
| BitOperation '<' Relation
| BitOperation '>' Relation
| BitOperation '<=' Relation
| BitOperation '>=' Relation
;
BitOperation:
Sum
| Sum '&' BitOperation
| Sum '|' BitOperation
| Sum '^' BitOperation
| Sum '<<' BitOperation
| Sum '>>' BitOperation
;
Sum:
Term
| Term '+' Sum
| Term '-' Sum
;
Term:
Factor
| Factor '*' Term
| Factor '/' Term
| Factor MODULO Term
;
Factor:
INTEGER
| FunctionCall
| STRING
| Table
| SYMBOL
| SYMBOL Subscripts
| '@' SYMBOL
| '@' SYMBOL Subscripts
| '-' Factor
| '\\' Factor
| '~' Factor
| '(' Expression ')'
;
Subscripts:
'[' Expression ']'
| '[' Expression ']' Subscripts
| '::' Factor
;
Table:
'[' MemberList ']'
;
MemberList:
TableMember
| TableMember ',' MemberList
;
TableMember:
ConstValue
| STRING
| Table
| '(' ExprList ')'
;
FunctionCall:
SYMBOL '(' ')'
| SYMBOL '(' ExprList ')'
;
ConstValue:
SYMBOL
| Integer
;
Integer:
INTEGER
| CHARACTER
;
%%