From 75948eb28bcd3a447516cb9d8c8431afb7eab110 Mon Sep 17 00:00:00 2001 From: Valk Richard Li <48872266+ValKmjolnir@users.noreply.github.com> Date: Wed, 11 Dec 2019 21:53:32 +0800 Subject: [PATCH] update --- version2.0/main.cpp | 16 +++++++- version2.0/nasal_parse.h | 85 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+), 2 deletions(-) diff --git a/version2.0/main.cpp b/version2.0/main.cpp index 63470ec..81904e9 100644 --- a/version2.0/main.cpp +++ b/version2.0/main.cpp @@ -9,7 +9,7 @@ std::string command; int main() { std::cout<<">> Nasal interpreter by github:ValKmjolnir"<> Input \"help\" to get help."<> Input \"help\" to get help ."<> "; @@ -76,7 +76,19 @@ int main() } else if(command=="ast") { - ; + lexer.scanner(res.get_source()); + lexer.generate_detail_token(); + if(!lexer.get_error()) + { + parser.get_token_list(lexer.get_detail_token()); + parser.main_generate(); + if(!parser.get_error()) + parser.get_root().print_tree(1); + else + std::cout<<">>[Parse] error occurred,stop."<>[Lexer] error occurred,stop."< parse; + std::stack checked; token this_token; int error; int warning; @@ -14,9 +15,15 @@ class nasal_parse void print_detail_token(); void get_token_list(std::list&); void get_token(); + void push_token(); + int get_error(); + abstract_syntax_tree& get_root(); // abstract_syntax_tree generation void main_generate(); + abstract_syntax_tree number_expr(); + abstract_syntax_tree string_expr(); + abstract_syntax_tree nil_expr(); }; void nasal_parse::print_detail_token() @@ -29,6 +36,8 @@ void nasal_parse::print_detail_token() { if(tmp.top().line!=line) { + for(int i=line+1;i& detail_token) { + while(!parse.empty()) + parse.pop(); + while(!checked.empty()) + checked.pop(); + // clear stack std::stack tmp; for(std::list::iterator i=detail_token.begin();i!=detail_token.end();++i) tmp.push(*i); @@ -68,15 +82,39 @@ void nasal_parse::get_token() { this_token=parse.top(); parse.pop(); + checked.push(this_token); } else { this_token.type=__stack_end; this_token.str="__stack_end"; + std::cout<<">>[Parse-error] empty token stack."<>[Parse-error] empty checked token stack."<>[Parse-error] line "<>[Parse] complete generation. "<