mirror of
https://github.com/irmen/prog8.git
synced 2024-08-20 21:29:18 +00:00
114 lines
1.7 KiB
Plaintext
114 lines
1.7 KiB
Plaintext
|
/*
|
||
|
IL65 lexer and parser grammar
|
||
|
*/
|
||
|
|
||
|
grammar il65;
|
||
|
|
||
|
|
||
|
NAME : [a-zA-Z_][a-zA-Z0-9_]* ;
|
||
|
DEC_INTEGER : ('0'..'9') | (('1'..'9')('0'..'9')+);
|
||
|
HEX_INTEGER : '$' (('a'..'f') | ('A'..'F') | ('0'..'9'))+ ;
|
||
|
BIN_INTEGER : '%' ('0' | '1')+ ;
|
||
|
|
||
|
|
||
|
module :
|
||
|
line*
|
||
|
EOF
|
||
|
;
|
||
|
|
||
|
line :
|
||
|
directive
|
||
|
| vardecl
|
||
|
| assignment
|
||
|
| augassignment
|
||
|
;
|
||
|
|
||
|
|
||
|
directive :
|
||
|
'%' singlename (literalvalue)?
|
||
|
;
|
||
|
|
||
|
vardecl:
|
||
|
datatype arrayspec? singlename ('=' expression)?
|
||
|
;
|
||
|
|
||
|
datatype:
|
||
|
'byte' | 'word' | 'float' | 'str' | 'str_p' | 'str_s' | 'str_ps'
|
||
|
;
|
||
|
|
||
|
arrayspec:
|
||
|
'[' expression (',' expression)? ']'
|
||
|
;
|
||
|
|
||
|
assignment :
|
||
|
assign_target '=' expression
|
||
|
;
|
||
|
|
||
|
augassignment :
|
||
|
assign_target ('+=' | '-=' | '/=' | '//=' | '*=' | '**=' |
|
||
|
'<<=' | '>>=' | '<<@=' | '>>@=' | '&=' | '|=' | '^=') expression
|
||
|
;
|
||
|
|
||
|
|
||
|
expression :
|
||
|
unary_expression
|
||
|
| '(' expression ')'
|
||
|
| expression '**' expression
|
||
|
| expression ('*' | '/' | '//' | '**') expression
|
||
|
| expression ('+' | '-' | '%') expression
|
||
|
| expression ('<<' | '>>' | '<<@' | '>>@' | '&' | '|' | '^') expression
|
||
|
| expression ('and' | 'or' | 'xor') expression
|
||
|
| expression ('==' | '!=' | '<' | '>' | '<=' | '>=') expression
|
||
|
| literalvalue
|
||
|
| register
|
||
|
| dottedname
|
||
|
| singlename
|
||
|
;
|
||
|
|
||
|
unary_expression:
|
||
|
'~' expression
|
||
|
| ('+' | '-') expression
|
||
|
| 'not' expression
|
||
|
;
|
||
|
|
||
|
singlename:
|
||
|
NAME
|
||
|
;
|
||
|
|
||
|
dottedname:
|
||
|
NAME ('.' NAME)+
|
||
|
;
|
||
|
|
||
|
register:
|
||
|
'A' | 'X' | 'Y' | 'AX' | 'AY' | 'XY' | 'SC' | 'SI' | 'SZ'
|
||
|
;
|
||
|
|
||
|
literalvalue:
|
||
|
BIN_INTEGER | HEX_INTEGER | DEC_INTEGER
|
||
|
| 'true' | 'false'
|
||
|
| array
|
||
|
;
|
||
|
|
||
|
array:
|
||
|
'[' expression (',' expression)* ']'
|
||
|
;
|
||
|
|
||
|
|
||
|
assign_target:
|
||
|
register
|
||
|
| singlename
|
||
|
| dottedname
|
||
|
;
|
||
|
|
||
|
COMMENT :
|
||
|
';' ~[\r\n]* -> channel(1)
|
||
|
;
|
||
|
|
||
|
WS :
|
||
|
[ \t] -> skip
|
||
|
;
|
||
|
|
||
|
EOL :
|
||
|
[\r\n]+ -> skip
|
||
|
;
|