Nasal-Interpreter/version0.5/ebnf.cpp

78 lines
3.2 KiB
C++

//
//definition:
//var e=1;
//var e=e;
//var e=e[0];
//var e=e[i];
//var e=e.e;
//var e=e[func()];
//var e=func();
// identifier
// scalar
// call_func -> identifier func_name()
// array_search -> identifier e[0] e[e]
// hash_search -> identifier e.e
<1><scalar> ::=
<number> //NUMBER
<string> //STRING
<!> <identifier>|<scalar>
<identifier>|<scalar> <+>|<->|<*>|</>|<~>|<and>|<or>|<==>|<!=>|<<>|<<=>|<>>|<>=> <identifier>|<scalar>
<(> <identifier>|<scalar> <)> // find a way to distinguish while(scalar) with real (scalar+-scalar)*scalar
<2><scalars> ::=
<scalar>|<scalars> <,> <scalar>|<identifier>
<identifier>|<identifiers> <,> <scalar>
<3><identifier> ::=
<identifier> // IDENTIFIER
<identifier> <[> <identifier>|<scalar> <]> //__array_search
<identifier> <.> <identifier> //__hash_search
<identifier> <(> <identifier>|<identifiers>|<scalar>|<scalars> <)> //__call_func
<identifier> <(><)> //__call_func_null
<4><identifiers> ::=
<identifier>|<identifiers> <,> <identifier>
<5><hash_member> ::=
<identifier> <:> <identifier>|<scalar>|<__func>
<identifier> <:> <func> <(><)> <{><}>
<identifier> <:> <func> <(> <identifier>|<identifiers> <)> <{><}>
<identifier> <:> <func> <(><)> <{> <statement>|<statements> <}>
<identifier> <:> <func> <(> <identifier>|<identifiers> <)> <{> <statement>|<statements> <}>
<6><hash_members> ::=
<hash_member>|<hash_members> <,> <hash_member>
<7><definition> ::=
<var> <identifier> <=> <identifier>|<scalar> <;>
<var> <identifier> <=> <[><]> <;>
<var> <identifier> <=> <{><}> <;>
<var> <identifier> <=> <[> <scalar>|<scalars>|<identifier>|<identifiers> <]> <;>
<var> <identifier> <=> <{> <hash_member>|<hash_members> <}> <;>
<8><assignment> ::=
<identifier> <=> <identifier>|<scalar> <;>
<identifier> <=> <[><]> <;>
<identifier> <=> <{><}> <;>
<identifier> <=> <[> <scalar>|<scalars>|<identifier>|<identifiers> <]> <;>
<identifier> <=> <{> <hash_member>|<hash_members> <}> <;>
<9><__func> ::=
<var> <identifier> <=> <func> <(><)> <{><}>
<var> <identifier> <=> <func> <(> <identifier>|<identifiers> <)> <{><}>
<var> <identifier> <=> <func> <(><)> <{> <statement>|<statements> <}>
<var> <identifier> <=> <func> <(> <identifier>|<identifiers> <)> <{> <statement>|<statements> <}>
<10><loop> ::=
<while> <scalar> <statement>
<while> <scalar> <{> <statement>|<statements> <}>
<foreach>|<forindex> <(> <statement> <identifier> <)> <statement>
<foreach>|<forindex> <(> <statement> <identifier> <{> <statement>|<statements> <}>
<for> <(> <statements> <identifier> <+=>|<-=>|<*=>|</=>|<~=>|<=> <scalar> <)> <statement>
<for> <(> <statements> <identifier> <+=>|<-=>|<*=>|</=>|<~=>|<=> <scalar> <)> <{> <statement>|<statements> <}>
<11><choose> ::=
<if>|<elsif> <scalar> <{> <statement>|<statements> <}>
<if>|<elsif> <scalar> <statement>
<else> <if> <scalar> <{> <statement>|<statements> <}>
<else> <if> <scalar> <statement>
<else> <{> <statement>|<statements> <}>
<else> <statement>
<12><statement> ::=
<definition>|<assignment>|<__func>|<loop>|<choose>
<identifier>|<continue>|<break>|<scalar> <;>
<return> <identifier>|<scalar> <;>
<13><statements> ::=
<statement>|<statements> <statement>