// \͋̕C
// 2002/03/17 - if-else  , while , for ǉ

// 
module := <sentence> <module> | <struct> <module> | <proc> <module>

struct := struct { <member> }
member := <identifer> | <identifer> <member>

proc := proc <identifer> ( <args> ) { <sequence> }
args := | <arg-list>
arg-list := <identifer> | <identifer> , <arg-list>

// ubN
sequence := | <sentence> <sequence>
sentence := <expr-sentence> | <statement> | <sub-statment> | <block>
block := { <sequence> }

// \
statement := <if-statement> | <while-statement> | <for-statement>
           | <loop-statment> | <return-statment>
sub-statment := break | continue;

if-statement := if ( <cond> ) <sentence>
              | if ( <cond> ) <sentence> else <sentence>
              | if ( <cond> ) <sentence> else <if-statment>
while-statement := while ( <cond> ) <sentence>
for-statement := for ( <expr-sentence> ; <cond> ; <expr-sentence> ) <sentence>
loop-statement := loop <block>
return-statement := return <expr> | return

// 
cond := <cond1> | <cond2>
cond1 := <cond3> | <cond3> & <cond1>
cond2 := <cond3> | <cond3> '|' <cond2>
cond3 := <cond4> | ( cond ) | ! ( cond )
cond4 := <expr> = <cond4> | <expr> == <cond4> | <expr> != <cond4>
       | <expr> < <cond4> | <expr> <= <cond4>
       | <expr> > <cond4> | <expr> >= <cond4>

  // oÔŌ݈ȉ̂悤ɂȂĂ
      cond4 := <expr> = <expr> | <expr> == <expr> | <expr> != <expr>
             | <expr> < <expr> | <expr> <= <expr>
             | <expr> > <expr> | <expr> >= <expr>

// 
expr-sentence := <call-func> | <call-module> | <variable> = <expr>

call-func := <identifer> ( <vars> )
call-module := <identifer> . <identifer> ( <vars> )
vars := | var-list
var-list := <expr> | <expr> , <var-list>

expr := <expr1> | null
expr1 := <expr2> | <expr2> + <expr1> | <expr2> - <expr1>
expr2 := <expr3> | <expr3> * <expr2> | <expr3> / <expr2> | <expr3> % <expr2>
expr3 := <factor> | - <factor> | + <factor>

factor := <constant> | <atom> | ( <expr-sentence> )
atom := <variable> | <call-func> | <call-module>
variable := <array> | <array> . <variable>
array := <identifer> <index>
index := | [ <expr> ] <index>

constant := <integer> | <string>
integer := <digit> | <hex>

// string  "  " ܂ł̕ --- "hello" Ȃ
// digit ͂POi --- 12345 Ȃ
// hex ͂PUi --- 0x7f Ȃ
