Fixed ast dump format problem.

pull/13/head
yhirose 9 years ago
parent 59c7ab94ac
commit 80d1488b42
  1. 27
      lint/server.cc
  2. 4
      peglib.h

@ -265,9 +265,25 @@ bool parse_code(const string& text, peg::parser& peg, string& json, shared_ptr<p
return ret; return ret;
} }
std::string replace_text(std::string &s, const std::string &toReplace, const std::string &replaceWith) string replace_all(const string& str, const char* from, const char* to)
{ {
return(s.replace(s.find(toReplace), toReplace.length(), replaceWith)); string ret;
ret.reserve(str.length());
size_t from_len = 0;
while (from[from_len]) {
from_len++;
}
size_t start_pos = 0, pos;
while ((pos = str.find(from, start_pos)) != string::npos) {
ret += str.substr(start_pos, pos - start_pos);
ret += to;
pos += from_len;
start_pos = pos;
}
ret += str.substr(start_pos);
return ret;
} }
int run_server(int port, const vector<char>& syntax, const vector<char>& source) int run_server(int port, const vector<char>& syntax, const vector<char>& source)
@ -275,8 +291,8 @@ int run_server(int port, const vector<char>& syntax, const vector<char>& source)
Server svr; Server svr;
svr.get("/", [&](const Request& req, Response& res) { svr.get("/", [&](const Request& req, Response& res) {
replace_text(indexHTML, "{{syntax}}", string(syntax.data(), syntax.size())); indexHTML = replace_all(indexHTML, "{{syntax}}", string(syntax.data(), syntax.size()).c_str());
replace_text(indexHTML, "{{source}}", string(source.data(), source.size())); indexHTML = replace_all(indexHTML, "{{source}}", string(source.data(), source.size()).c_str());
res.set_content(indexHTML, "text/html"); res.set_content(indexHTML, "text/html");
}); });
@ -297,7 +313,10 @@ int run_server(int port, const vector<char>& syntax, const vector<char>& source)
shared_ptr<peg::Ast> ast; shared_ptr<peg::Ast> ast;
if (parse_code(codeText, peg, codeResult, ast)) { if (parse_code(codeText, peg, codeResult, ast)) {
astResult = peg::ast_to_s(ast); astResult = peg::ast_to_s(ast);
astResult = replace_all(astResult, "\n", "\\n");
astResultOptimized = peg::ast_to_s(peg::AstOptimizer(true).optimize(ast)); astResultOptimized = peg::ast_to_s(peg::AstOptimizer(true).optimize(ast));
astResultOptimized = replace_all(astResultOptimized, "\n", "\\n");
} }
} }

@ -2142,10 +2142,10 @@ void ast_to_s(const std::shared_ptr<T>& ptr, std::string& s, int level = 0) {
name = ast.original_name + " (" + ast.name + ")"; name = ast.original_name + " (" + ast.name + ")";
} }
if (ast.is_token) { if (ast.is_token) {
s += "- " + name + "(" + ast.token + ")\\n"; s += "- " + name + "(" + ast.token + ")\n";
} }
else { else {
s += "+ " + name + "\\n"; s += "+ " + name + "\n";
} }
for (auto node : ast.nodes) { for (auto node : ast.nodes) {
ast_to_s(node, s, level + 1); ast_to_s(node, s, level + 1);

Loading…
Cancel
Save