diff --git a/version3.0/nasal.ebnf b/version3.0/nasal.ebnf index d867bcc..fdc564a 100644 --- a/version3.0/nasal.ebnf +++ b/version3.0/nasal.ebnf @@ -25,17 +25,19 @@ function::= argument_list::= '(' [{id ','} ([id '...']|{id '=' calculation ','})] ')' ; -expressions::= - '{' {definition|assignment|calculation|loop|conditional|return_expr|continue_expr|break_expr} '}' - |definition ';' - |multi_assignment ';' - |calculation ';' +expr::= + definition + |multi_assignment + |calculation |loop |conditional |return_expr |continue_expr |break_expr ; +expressions::= + '{' {expr} '}' +; calculation::= '(' calculation ')' |scalar diff --git a/version3.0/nasal_enum.h b/version3.0/nasal_enum.h index 4b3e97e..ca32c9a 100644 --- a/version3.0/nasal_enum.h +++ b/version3.0/nasal_enum.h @@ -37,6 +37,7 @@ enum parse_error lack_left_curve, lack_left_bracket, lack_left_brace, + lack_right_brace, lack_semi, lack_comma, lack_colon, @@ -56,6 +57,7 @@ void error_info(int line,int error_type) case lack_left_curve: detail="lack left curve."; break; case lack_left_bracket: detail="lack left bracket."; break; case lack_left_brace: detail="lack left brace."; break; + case lack_right_brace: detail="lack right brace."; break; case lack_semi: detail="lack \';\' here."; break; case lack_comma: detail="lack comma."; break; case lack_colon: detail="lack colon."; break; diff --git a/version3.0/nasal_parse.h b/version3.0/nasal_parse.h index 752361b..14bfe63 100644 --- a/version3.0/nasal_parse.h +++ b/version3.0/nasal_parse.h @@ -19,6 +19,7 @@ private: nasal_ast hash_member_gen(); nasal_ast func_gen(); nasal_ast args_list_gen(); + nasal_ast expr(); nasal_ast exprs_gen(); nasal_ast calculation(); nasal_ast trinocular(); @@ -80,29 +81,8 @@ void nasal_parse::main_process() root.set_type(ast_root); while(ptr> [parse] complete generation. "<=tok_list_size || (ptr=tok_list_size) + { + error_info(node.get_line(),lack_right_brace); ++error; } } + else + node.add_child(expr()); return node; } nasal_ast nasal_parse::calculation()