diff --git a/docs/index.js b/docs/index.js index af3c94e..a7e4cd7 100644 --- a/docs/index.js +++ b/docs/index.js @@ -86,12 +86,13 @@ function parse() { if (isValid) { $grammarValidation.removeClass('editor-validation-invalid').text('Valid').show(); + codeAst.insert(data.ast); + codeAstOptimized.insert(data.astOptimized); + $codeValidation.removeClass('editor-validation-invalid').text('Valid').show(); + const isValid = data.code.length === 0; - if (isValid) { - codeAst.insert(data.ast); - codeAstOptimized.insert(data.astOptimized); - $codeValidation.removeClass('editor-validation-invalid').text('Valid').show(); - } else { + + if (!isValid) { const html = generateErrorListHTML(data.code); $codeInfo.html(html); $codeValidation.addClass('editor-validation-invalid').text('Invalid').show(); diff --git a/docs/native.cpp b/docs/native.cpp index db37a8f..6c37012 100644 --- a/docs/native.cpp +++ b/docs/native.cpp @@ -43,7 +43,7 @@ bool parse_grammar(const std::string &text, peg::parser &peg, return ret; } -bool parse_code(const std::string &text, peg::parser &peg, std::string &json, +void parse_code(const std::string &text, peg::parser &peg, std::string &json, std::shared_ptr &ast) { peg.enable_ast(); bool init; @@ -51,7 +51,6 @@ bool parse_code(const std::string &text, peg::parser &peg, std::string &json, json += "["; auto ret = peg.parse_n(text.data(), text.size(), ast); json += "]"; - return ret; } inline std::vector splitRulesText(const std::string &s) { @@ -78,7 +77,8 @@ std::string lint(const std::string &grammarText, const std::string &codeText, if (ret && peg) { std::shared_ptr ast; - if (parse_code(codeText, peg, codeResult, ast)) { + parse_code(codeText, peg, codeResult, ast); + if (ast) { astResult = escape_json(peg::ast_to_s(ast)); auto rules = splitRulesText(opt_rules_text); astResultOptimized = escape_json( diff --git a/docs/native.wasm b/docs/native.wasm index 453ead5..05f6ec5 100644 Binary files a/docs/native.wasm and b/docs/native.wasm differ diff --git a/peglib.h b/peglib.h index 4d557d1..1f88483 100644 --- a/peglib.h +++ b/peglib.h @@ -3105,7 +3105,7 @@ private: g["Sequence"] = [&](const SemanticValues &vs) { if (vs.empty()) { - return lit(""); + return npd(lit("")); } else if (vs.size() == 1) { return std::any_cast>(vs[0]); } else {