From 0d005fb3dadf14dbdc58d5abde2e6bf6bc6f15b6 Mon Sep 17 00:00:00 2001 From: yhirose Date: Fri, 15 Jan 2021 00:05:22 -0500 Subject: [PATCH] FIxed problems with error recovery --- docs/index.js | 11 ++++++----- docs/native.cpp | 6 +++--- docs/native.wasm | Bin 353675 -> 353752 bytes peglib.h | 2 +- 4 files changed, 10 insertions(+), 9 deletions(-) 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 453ead5d9fdba095c8707e6bf34d487cfc870211..05f6ec5778f36d153cfe07913d3fe5ce31a997e2 100644 GIT binary patch delta 2098 zcmYjSeTWrR6u;-(bMMT&nfKo8m%ID?*m=*VuC?iwwPu3s6H&Cntsn{_>Mv_8u#6}o zUs?9$A8t)FS{X`(L6O)R?~j5^5-j_$4|FjKD=d-_`=XM*es{L0JM+%D=lk4q&YidU zP}jtvuCaO~O)PaCH=ESlGq|5f(jV!H4nx<|Ey}@LbGTla^lCn5vRokI4%4of zd=TsrDQ33D6xb^3Thh`~Foptfsa;v<(Hvsa?=xu~vN_8u7CmBNAC^RB9uy#hUNA*? z3fHK|5O`S7F~08`@|#2jUj(FcTe78cSwbFCp|fLAJ_V6)0>T^H0dMB0*?Nh=G`_$XBMroriUijZz#C08ZMpeQkK*ff54rfrugrq6jaS zER{TE<$`m&Loe(Ok+k1k4_O%`ywDhHW}i1-+I!mTaNsItoOgqY<*VTPWw1+xBnl*o z)s$Xikst-_WE|Zr1TpFXPhyP{w$@ir6hc9r+&wah@@;|DKQFlX&YcL_4|L=suAB3^~ahQ2Ddl>?+yF13{- z9hJ*L5TH2ul49Vw75M-0B1u1xXK{iy4nmj4QTdURdD3U6&ybydQf})8Ryz~1lMLx1=;V8a!ON9E=5?Q>@(7gvX=2=`vRw$c!d|#iM5gqL zluN33cCQ{NTL~i*&no#|K$yUpMj{MS5V*pNpvO2IrW$jIA#lT#Hw^1rY>iu01|TCjE5F<$&|X=H{@H-a7U< zneodWJ%p>6PEVb1UFwAE(n`8FJqF>H$Co+b^IHcVdt$FKDol#wTekI4I+4Ab^S^@9 z!`ogSLCR_J?Sk=}POibQjDPaSrOvMQ*Oegd{OblGlWj3nY5lHg1ti%rL#xQNz`Jo8 z$lt02&1|Gbi0@FP^>~doIn7F)u7c+JIxS|9yJzQ`gL9~oC3C0@5%yc1=G*=B5y+?K z(oR&rwd8tQgd5ws<6f#W=aWu5GVH5Q`yz2q_%Hhoq(dII6_f~qPgYM7Xd69lD zCEVEL$FnMlX~d)T)`u_AohV`J;?HQR54`3CJy+;7Dt?{9#A^&DUfzX)Hq+`mO^XX? zLww2qCFoD<<}iI%nwov_vF_Kp5ocrLx-SwQ zo;2yKakhJr%+GFGqoeHPBAJ~%vqmq;)*sci?C^Wq_>w5pFdEHf-Ys*dCVD_kZ8TRE zDbf8L$6XOVU(S~#S?@+^WQR6LdkLY3xF^v|)j}QXtZ$>#d_9?=N#lpA=fD8woweLc z&q`!Vi5bEr$QjWP%cQZNz%29clWAGADFYQo6KlMps6xbzmtl-u7FB3x2bwZ+E)Q{> zm;|WPp~N=yZKEy~NxT(^B307E;JaeEaGYJYR;KrG!ym1J3xt$B=Rb7z*fgR|!4^am~tbHvNb^oV{>F65Nw_j>r-}OvL%9 nXO*M!2AS;GQQ42N*gheHMd0^ONVl7#ufLY3KyLg-f(?HIwsA#O delta 2181 zcmZ8iUyNK;89(25zVF<7=iZrn_g`mswtwzUx9t|U?Lc)4Ha0t^?FOQ4)x=<83`7#7 z^?`zDdFgDURhp7)?GSE>_JM%mK_kII<^dD8M3drbAcnLXP(vh&_NhUMbR**L+`(u( z_uliJ@BiO3v$`^Nc4h3`bi$nub?%Z5mU*uA5|MWQMxPrIx|@z0zdum!4;txyfp6+4 zlW{_hD?~gZ!-gpY!U2(CW+zf%XI$vW>Uc$jB2a1AILOg9Vwnk1sMs$P$=vWRYFyu-fYd)(o|!fGqKlWH6cYwC=ub!T!q-N zRW}vk)w0nxk4^oPO-)dK|>{7(s{i>6ncm;5{Nvw%)Q!hsTGfVZc{Rymdjv%2f%& z6yzEqhzhA;vu;8h0;Fh|#N(Yxl%XE5q)v>obD@Et5(?`1{?P#_j}P0BZ0ww) z4Lh1H!DzaQt0A~rvU&Rm5xN;52$@F+gPm{O_h2iAHObpwKq5oF4vjX$+pzOARO*k*YBko3O(#pAf2C1ck7hmnA>_N6ylB;7ZbK8tQ&SW;^A|7mFfoMOMy z9VC6w?pqJ^#uP!aIMO8e_n^^#tVyT6WMi7{gye(Mw3mTCyS0>TZKFn!Z=)0}oG*CE zmuKj=K)=78o<#Ng`|hUOaAW%?PSG?2zxYjh6AkU3JWVqmKJ#sQ%fqve(AgBQet~{6 zLXQ-``XRkLJY{ljpANGvja=K=(P@+SfAb@H7-j4){GKL5z%T!ap013F$$mz09<*C| zPSFs$UgPI9Q3Gv-x@vhOOj$}nV*G?OUwK%3*QHS!B6=bUAxThgZ!75 zIh_Fcy+88nwM0#V%RcYheWJL2gBOY|@9-h8zxEFA^qD>NcgBy1_IvO0ogOCt;ERC8 zqieji|LS}EB9QL@=|8$=4{w6~-%ZH!ECeqel;`Gly%><|Y&PxuSd*s>91#*}S`VZt z2W1|mFdsMB08AEl_3Vr=s#2V~O-752uh~jsd48Zc+LR)H$nGMv@gaM&NH!W5m!6ib z#o~FZw@PkuJBP95Su@%0+)<^RXE@8o$`oNja(k?ud8gJ#K?kbTwz)0VPRhPdAdWd6 z&-s&PkIn4=iL_07c}M&5j+}<kq&K{EaqCx8t|N4dq}P0ML^; zmVtH1=hP05&haQBL+060Y~j)D3o=%R!zfa+cfPH5H6PQ zk$Q3H7TUPk=HfL<&#|A`T)aC|)-%gJr+?2Wd1E)-DCU1E*O}*w)(cYaA9_L3Jimy4 zyAGX1?_V{?nu6wc+9t=(N!D}+;I#P06*>(vs[0]); } else {