diff options
author | Mu Qiao <qiaomuf@gentoo.org> | 2011-06-20 17:52:21 +0800 |
---|---|---|
committer | Mu Qiao <qiaomuf@gentoo.org> | 2011-06-22 19:52:27 +0800 |
commit | 6db29285fb16aea68a9d2527fe9cfd4e1918b247 (patch) | |
tree | 7e8a43f27de4427a1026786880b38a4e320f9075 /src | |
parent | Walker: support -a and -o in built-in test (diff) | |
download | libbash-6db29285fb16aea68a9d2527fe9cfd4e1918b247.tar.gz libbash-6db29285fb16aea68a9d2527fe9cfd4e1918b247.tar.bz2 libbash-6db29285fb16aea68a9d2527fe9cfd4e1918b247.zip |
Utility: support printing tokens received by walker
It's helpful if ast_printer can print tokens received by walker grammar.
Now this is supported with the -w option.
Diffstat (limited to 'src')
-rw-r--r-- | src/core/bash_ast.cpp | 22 | ||||
-rw-r--r-- | src/core/bash_ast.h | 4 |
2 files changed, 24 insertions, 2 deletions
diff --git a/src/core/bash_ast.cpp b/src/core/bash_ast.cpp index 281f076..dc9501c 100644 --- a/src/core/bash_ast.cpp +++ b/src/core/bash_ast.cpp @@ -112,7 +112,7 @@ namespace } } -std::string bash_ast::get_tokens(std::function<std::string(ANTLR3_UINT32)> token_map) +std::string bash_ast::get_parser_tokens(std::function<std::string(ANTLR3_UINT32)> token_map) { std::stringstream result; int line_counter = 1; @@ -147,6 +147,26 @@ std::string bash_ast::get_tokens(std::function<std::string(ANTLR3_UINT32)> token print_line_counter(result, token, line_counter, tokenName == "CONTINUE_LINE"? 1 : 0); } } + return result.str(); +} + +std::string bash_ast::get_walker_tokens(std::function<std::string(ANTLR3_UINT32)> token_map) +{ + std::stringstream result; + pANTLR3_INT_STREAM istream = nodes->tnstream->istream; + auto istream_size = istream->size(istream); + + for(ANTLR3_UINT32 i = 1; i <= istream_size; ++i) + { + ANTLR3_UINT32 token = istream->_LA(istream, boost::numeric_cast<ANTLR3_INT32>(i)); + if(token == 2) + result << "DOWN "; + else if(token == 3) + result << "UP "; + else + result << token_map(istream->_LA(istream, boost::numeric_cast<ANTLR3_INT32>(i))) << " "; + } + result << std::endl; return result.str(); } diff --git a/src/core/bash_ast.h b/src/core/bash_ast.h index 63e35d1..ae6bb0f 100644 --- a/src/core/bash_ast.h +++ b/src/core/bash_ast.h @@ -105,7 +105,9 @@ public: std::string get_string_tree(); - std::string get_tokens(std::function<std::string(ANTLR3_UINT32)>); + std::string get_parser_tokens(std::function<std::string(ANTLR3_UINT32)>); + + std::string get_walker_tokens(std::function<std::string(ANTLR3_UINT32)>); }; #endif |