script

script.git
git clone git://git.lenczewski.org/script.git
Log | Files | Refs

simple.grammar (1350B)


      1 program =
      2   | $eof
      3   | declaration program
      4   ;
      5 
      6 declaration =
      7   | variable-declaration
      8   | function-declaration
      9   ;
     10 
     11 variable-declaration =
     12   | ident ':' type '=' expr ';'
     13   ;
     14 
     15 function-declaration =
     16   | ident '::' '(' [ parameter-list ] ')' ':' type block-statement
     17   ;
     18 
     19 parameter-list =
     20   | parameter
     21   | parameter ',' parameter-list
     22   ;
     23 
     24 parameter =
     25   | ident ':' type
     26   ;
     27 
     28 statement-list =
     29   | statement
     30   | statement statement-list
     31   ;
     32 
     33 statement =
     34   | block-statement
     35   | decl-statement
     36   | expr-statement
     37   | if-else-statement
     38   | while-statement
     39   | ret-statement
     40   ;
     41 
     42 block-statement =
     43   | '{' [ statement-list ] '}'
     44   ;
     45 
     46 decl-statement =
     47   | ident ':' type '=' expr ';'
     48   ;
     49 
     50 expr-statement =
     51   | expr ';'
     52   ;
     53 
     54 if-else-statement =
     55   | 'if' '(' expr ')' statement [ 'else' statement ]
     56   ;
     57 
     58 while-statement =
     59   | 'while' '(' expr ')' statement
     60   ;
     61 
     62 ret-statement =
     63   | 'return' ident ';'
     64   ;
     65 
     66 ident =
     67   | ? c-style identifier ?
     68   ;
     69 
     70 type =
     71   | 'u8'
     72   | 'u16'
     73   | 'u32'
     74   | 'u64'
     75   | 's8'
     76   | 's16'
     77   | 's32'
     78   | 's64'
     79   | 'f32'
     80   | 'f64'
     81   | 'c8'
     82   ;
     83 
     84 expr =
     85   | ident
     86   | literal
     87   | assignment
     88   | binary-op
     89   ;
     90 
     91 assignment =
     92   | ident '=' expr
     93   ;
     94 
     95 binary-op =
     96   | expr expr binary-operator
     97   ;
     98 
     99 binary-operator =
    100   | '+'
    101   | '-'
    102   | '*'
    103   | '/'
    104   ;
    105 
    106 literal =
    107   | integer-literal
    108   ;
    109 
    110 integer-literal =
    111   | ? c-style integer literal ?
    112   ;