diff --git a/version2.0/main.cpp b/version2.0/main.cpp index 743284a..740647e 100644 --- a/version2.0/main.cpp +++ b/version2.0/main.cpp @@ -25,6 +25,7 @@ int main() std::cout<<">> [lexer ] turn code into tokens."<> [parser] turn tokens into abstract syntax tree."<> [ast ] check the abstract syntax tree."<> [run ] run code."<> [exit ] quit nasal interpreter."<push_token();root.get_children().push_back(loop_expr());break; case __semi:break; default:++error;print_parse_error(error_token_in_main,this_token.line,this_token.type); } @@ -186,6 +188,7 @@ abstract_syntax_tree nasal_parse::nil_expr() abstract_syntax_tree nasal_parse::var_outside_definition() { abstract_syntax_tree definition_node; + definition_node.set_type(__definition); this->get_token(); if(this_token.type!=__var) { @@ -204,7 +207,28 @@ abstract_syntax_tree nasal_parse::var_outside_definition() ++error; print_parse_error(definition_lack_id,this_token.line); } - return definition_node; } + +abstract_syntax_tree nasal_parse::loop_expr() +{ + abstract_syntax_tree loop_main_node; + loop_main_node.set_type(__loop); + this->get_token(); + switch(this_token.type) + { + case __for: + case __while: + case __foreach: + case __forindex:break; + } + return loop_main_node; +} + +abstract_syntax_tree nasal_parse::choose_expr() +{ + abstract_syntax_tree choose_main_node; + choose_main_node.set_type(__ifelse); + return choose_main_node; +} #endif diff --git a/version2.0/parse.bnf b/version2.0/parse.bnf index 9d0d9e1..35aa624 100644 --- a/version2.0/parse.bnf +++ b/version2.0/parse.bnf @@ -6,28 +6,61 @@ ::= ::= + ::= ::= ::= + + ::= <[> { <,>} <]> + ::= <{> {( | ) <:> <,>} <}> ::= + +| +| +| +| +| +| <(> <)> +| +| - ::= - { } - ::= - { } -| { } -| { } -| { } - ::= - <-> -| - ::= - {<+> } -| {<-> } -| {<~> } - ::= - {<*> } -| { } + ::= + [<(> <)>] +| [<(> <)>] <{> { <;>} <}> +| <(> { <,>} { <=> <,>} {} <)> +| <(> { <,>} { <=> <,>} {} <)> <{> { <;>} <}> + ::= + { (<[> { <,>} <]>) | (<[> <:> [] <]>) | (<.> ) | (<(> { <,>} <)>) | (<(> { <:> <,>} <)>) } +| { (<[> { <,>} <]>) | (<[> <:> [] <]>) | (<.> ) | (<(> { <,>} <)>) | (<(> { <:> <,>} <)>) } +| +| <(> <)> { (<[> { <,>} <]>) | (<[> <:> [] <]>) | (<.> ) | (<(> { <,>} <)>) | (<(> { <:> <,>} <)>) } + + ::= + +| +| +| +| + ::= + { } + ::= + { } + ::= + {<+>|<->|<~> } + ::= + {<*>| } + + ::= + +| <=> +| <(> {() | () <,>} <)> <=> +| <(> {() | () <,>} <)> <=> +| <(> {() | () <,>} <)> <=> <(> { <,>} <)> +| <(> {() | () <,>} <)> <=> <(> { <,>} <)> + ::= + <=> +| <(> { <,>} <)> <=> +| <(> { <,>} <)> <=> <(> { <,>} <)> ::= | @@ -38,13 +71,13 @@ | <(> [] <;> [] <;> <)> <{> { <;>} <}> ::= <(> <)> [<;>] -| <(> <) <{> { <;>} <}> +| <(> <)> <{> { <;>} <}> ::= <(> [ [] <)> [<;>] -| <(> [ [] <) <{> { <;>} <}> +| <(> [ [] <)> <{> { <;>} <}> ::= <(> [ [] <)> [<;>] -| <(> [ [] <) <{> { <;>} <}> +| <(> [ [] <)> <{> { <;>} <}> ::= {} [] ::= @@ -57,7 +90,7 @@ | <(> <)> <{> { <;>} <}> ::= [<;>] -| { <;>} <}> +| <{> { <;>} <}> ::= ::=