aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMu Qiao <qiaomuf@gentoo.org>2011-06-20 17:52:21 +0800
committerMu Qiao <qiaomuf@gentoo.org>2011-06-22 19:52:27 +0800
commit6db29285fb16aea68a9d2527fe9cfd4e1918b247 (patch)
tree7e8a43f27de4427a1026786880b38a4e320f9075 /src
parentWalker: support -a and -o in built-in test (diff)
downloadlibbash-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.cpp22
-rw-r--r--src/core/bash_ast.h4
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