diff options
| -rw-r--r-- | grammar.ebnf | 92 | 
1 files changed, 59 insertions, 33 deletions
diff --git a/grammar.ebnf b/grammar.ebnf index b28e0ac..ed4260e 100644 --- a/grammar.ebnf +++ b/grammar.ebnf @@ -2,76 +2,102 @@   *)  program -	: {'pub' declaration} +	= {'pub', declaration}  	;  declaration -	: mutdecl +	= mutdecl  	| constdecl  	;  assignment -	: expression '=' expression ';' +	= expression, '=', expression, ';'  	;  mutdecl -	: IDENT ':' type ';' -	| IDENT ':' [type] '=' (expression | ellipsis) ';' +	= IDENT, ':', type, ';' +	| IDENT, ':', [type], '=', expression | ellipsis, ';'  	;  constdecl -	: IDENT ':' [type] ':' (expression ';' | function) +	= IDENT, ':', [type], ':', (expression, ';') | function  	;  function -	: prototype '{' statement* '}' +	= prototype, '{', {statement}, '}'  	;  prototype -	: '(' ')' [type] +	= '(', ')', [type]  	;  statement -	| declaration +	= declaration  	| assignment -	| 'return' [expression] ';' +	| 'return', [expression], ';'  	;  expression -	: IDENT -	| NUMERIC -	| unop expression -	| expression binop expression -	| '(' expression ')' +	= IDENT +	| number +	| unop, expression +	| expression, binop, expression +	| '(', expression, ')'  	;  unop -	: '-' -	| '&' -	| '+' -	| '~' +	= '-' | '&' | '+' | '~'  	;  binop -	: '+' -	| '!=' -	| '%' -	| '&' -	| '*' -	| '-' -	| '/' -	| '<<' -	| '==' -	| '>>' -	| '|' -	| '~' +	= '+'  | '!=' | '%' | '&' +	| '*'  | '-'  | '/' | '<<' +	| '==' | '>>' | '|' | '~' +	; + +number +	= integer +	| floating +	; + +integer +	= ['0d'], decdigit, {decdigit} +	|  '0b',  bindigit, {bindigit} +	|  '0o',  octdigit, {octdigit} +	|  '0x',  hexdigit, {hexdigit} +	; + +floating +	=  integer,  '.', [integer] +	| [integer], '.',  integer +	; + +bindigit +	= '0' | '1' +	; + +octdigit +	= '0' | '1' | '2' | '3' +	| '4' | '5' | '6' | '7' +	; + +decdigit +	= '0' | '1' | '2' | '3' | '4' +	| '5' | '6' | '7' | '8' | '9' +	; + +hexdigit +	= '0' | '1' | '2' | '3' +	| '4' | '5' | '6' | '7' +	| '8' | '9' | 'A' | 'B' +	| 'C' | 'D' | 'E' | 'F'  	;  type -	: IDENT +	= IDENT  	;  ellipsis -	: '…' +	= '…'  	| '...'  	;  |