Gramatika jazyka (detailnejsie vid subory parser.yy a scanner.ll)

Tokeny

T_BEGIN: "begin"
T_END: "end"
READ: "read"
WRITE: "write"
IF: "if"
THEN: "then"
ELSE: "else"
WHILE: "while"
DO: "do"
DEF: "def"
LOCAL: "local"
SHARED: "shared"
FOR: "for"
TO: "to"
PARDO: "pardo"
RETURN: "return"
INT: "int"
ARRAY: "array"
NEW: "new"
DELETE: "delete"
PARALLEL: "parallel"
SIZEOF: "sizeof"
SETP: "setP"
ASSIGNOP: ":="
SEMICOLON: ";"
LPAREN: "("
RPAREN: ")" 
SHL: "<<"
SHR: ">>"
GEQ: ">="
LEQ: "<="
AND: "&"
LAND:"&&"
OR:  "|" 
LOR: "||"
XOR: "^" 
INTEGER: [0-9]+
IDENTIFIER:  [A-Za-z][A-Za-z0-9_]*

------------
Gramatika:

program
	: blocks

blocks
	: blocks blok 
	| /* empty */

blok
	: functiondef stmtblock 
	
functiondef
	: varType IDENTIFIER LPAREN arglist RPAREN 
	| varType IDENTIFIER LPAREN RPAREN 
	| PARALLEL varType IDENTIFIER LPAREN RPAREN 
	
arglist
	: arglist ',' varType IDENTIFIER
	| varType IDENTIFIER 


statements
	: statements statement 
	| /* empty */

stmtblock
	: T_BEGIN statements T_END 

statement
	: stmtblock 
	| assignment
	| iteration
	| READ IDENTIFIER SEMICOLON 
	| READ arr '[' expression ']' SEMICOLON 
	| WRITE expression SEMICOLON 
	| ifstatement 
	| functioncall SEMICOLON 
	| namespace varType IDENTIFIER  SEMICOLON 
	| RETURN SEMICOLON 
	| RETURN expression SEMICOLON 
	| DELETE arr SEMICOLON 
	| SETP expression SEMICOLON 
	 
	
varType
	: INT 
	| ARRAY 
	
	 
functioncall
	: IDENTIFIER LPAREN RPAREN 
	| IDENTIFIER LPAREN exprlist RPAREN  
	
namespace
	: /* empty */  // default local
	| LOCAL  
	| SHARED
	
ifstatement
	: IF expression THEN statement     
	| IF expression THEN statement ELSE statement 

iteration
	: WHILE expression statement  
	| DO statements WHILE expression SEMICOLON
	| FOR IDENTIFIER ASSIGNOP expression TO expression DO statement 
	| FOR IDENTIFIER ASSIGNOP expression TO expression PARDO statement

assignment
	: IDENTIFIER ASSIGNOP expression SEMICOLON
	| arr '[' expression ']' ASSIGNOP expression SEMICOLON 
	
arr 
	: IDENTIFIER 
	| arr '[' expression ']'

expression
	: idexpression 
	| functioncall
	| constant 
	| '!' expression 
	| expression '+' expression 
	| expression '-' expression
	| expression '*' expression
	| expression '/' expression
	| expression '>' expression
	| expression '<' expression
	| expression GEQ expression
	| expression LEQ expression
	| expression '=' expression
	| expression SHL expression
	| expression SHR expression
	| expression AND expression
	| expression OR expression 
	| expression XOR expression
	| expression LAND expressio
	| expression LOR expression
	| LPAREN expression RPAREN 
	| dereference	
	| NEW LPAREN expression ',' varType RPAREN 
	| SIZEOF LPAREN expression RPAREN 
	
constant
	: INTEGER 

exprlist
	: expression 
	| exprlist ',' expression 
	
idexpression
	: IDENTIFIER 

dereference
	: idexpression '[' expression ']' 
	| dereference '[' expression ']' 


