spl2

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

spl.bnf (861B)


      1 prog 	:= prog node 
      2 	| node
      3 
      4 node 	:= fdec 
      5 	| assign 
      6 	| ...imports...
      7 
      8 assign	:= name type '=' value
      9 	| name type
     10 
     11 reassign:= name '=' value 
     12 
     13 fdec 	:= "func" name '(' assigns ')' type '=' '{' body '}'
     14 	| "func" name '(' assigns ')' type
     15 	| "symbol" NAME '(' assigns ')' type
     16 
     17 
     18 assigns	:= assigns assign 
     19 	| assign
     20 
     21 type 	:= name
     22 	| '*' type
     23 	| '[' ']' type
     24 	| '[' value ']' type
     25 	| func '(' types ')'
     26 
     27 types	:= types ',' type 
     28 	| type
     29 
     30 value	:= name
     31 	| name '[' value ']'
     32 	| value ':' type 
     33 	| fcall
     34 	| lit
     35 	| expr
     36 
     37 values	:= values ',' value | value
     38 
     39 fcall	:= name '(' values ')'
     40 
     41 expr	:= value '+' value
     42 	| value '-' value
     43 	| value '*' value
     44 	| value '/' value
     45 	| value '%' value
     46 	| '&' value 
     47 	| '*' value 
     48 
     49 lit	:= name
     50 	| int
     51 	| float
     52 	| str
     53 
     54 name	:= NAME
     55 	| name::NAME
     56 
     57 body	:= body block ';'
     58 	| block ';'
     59 
     60 block	:= assign 
     61 	| fcall
     62 	| reassign
     63 	| fdec