From adf0df5081720ed49aa7920e09ce5e68a1f5742c Mon Sep 17 00:00:00 2001 From: Evgeny Metelkin Date: Sun, 26 Nov 2023 10:48:11 +0200 Subject: [PATCH] fix syntax inside dict --- src/index.js | 63 +++++++++++++++++---------------- src/pegjs/heta.pegjs | 2 +- test/parse/input/comments.heta | 6 ++++ test/parse/output/comments.json | 5 +++ 4 files changed, 44 insertions(+), 32 deletions(-) diff --git a/src/index.js b/src/index.js index f903bf4..cd97ee9 100644 --- a/src/index.js +++ b/src/index.js @@ -1463,7 +1463,7 @@ function peg$parse(input, options) { } function peg$parseDict() { - var s0, s1, s2, s3, s4, s5, s6; + var s0, s1, s2, s3, s4, s5; peg$silentFails++; s0 = peg$currPos; @@ -1479,57 +1479,58 @@ function peg$parse(input, options) { s3 = peg$parseBreak(); if (s3 === peg$FAILED) { s3 = peg$parseSpace(); + if (s3 === peg$FAILED) { + s3 = peg$parseComment(); + } } while (s3 !== peg$FAILED) { s2.push(s3); s3 = peg$parseBreak(); if (s3 === peg$FAILED) { s3 = peg$parseSpace(); + if (s3 === peg$FAILED) { + s3 = peg$parseComment(); + } } } if (s2 !== peg$FAILED) { s3 = []; - s4 = peg$parseComment(); + s4 = peg$parseDictPair(); while (s4 !== peg$FAILED) { s3.push(s4); - s4 = peg$parseComment(); + s4 = peg$parseDictPair(); } if (s3 !== peg$FAILED) { s4 = []; - s5 = peg$parseDictPair(); + s5 = peg$parseBreak(); + if (s5 === peg$FAILED) { + s5 = peg$parseSpace(); + if (s5 === peg$FAILED) { + s5 = peg$parseComment(); + } + } while (s5 !== peg$FAILED) { s4.push(s5); - s5 = peg$parseDictPair(); + s5 = peg$parseBreak(); + if (s5 === peg$FAILED) { + s5 = peg$parseSpace(); + if (s5 === peg$FAILED) { + s5 = peg$parseComment(); + } + } } if (s4 !== peg$FAILED) { - s5 = []; - s6 = peg$parseBreak(); - if (s6 === peg$FAILED) { - s6 = peg$parseSpace(); - } - while (s6 !== peg$FAILED) { - s5.push(s6); - s6 = peg$parseBreak(); - if (s6 === peg$FAILED) { - s6 = peg$parseSpace(); - } + if (input.charCodeAt(peg$currPos) === 125) { + s5 = peg$c54; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c55); } } if (s5 !== peg$FAILED) { - if (input.charCodeAt(peg$currPos) === 125) { - s6 = peg$c54; - peg$currPos++; - } else { - s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$c55); } - } - if (s6 !== peg$FAILED) { - peg$savedPos = s0; - s1 = peg$c56(s4); - s0 = s1; - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } + peg$savedPos = s0; + s1 = peg$c56(s3); + s0 = s1; } else { peg$currPos = s0; s0 = peg$FAILED; diff --git a/src/pegjs/heta.pegjs b/src/pegjs/heta.pegjs index 35b4ac2..9c7008c 100644 --- a/src/pegjs/heta.pegjs +++ b/src/pegjs/heta.pegjs @@ -82,7 +82,7 @@ Note "Note" = "'''" s:(!"!(''')" s:("\\'"/[^']))+ "'''" (Break/Space)* return { notes }; } -Dict "Dict" = "{" (Break/Space)* Comment* item: DictPair* (Break/Space)* "}" +Dict "Dict" = "{" (Break/Space/Comment)* item: DictPair* (Break/Space/Comment)* "}" { return _.fromPairs(item); } diff --git a/test/parse/input/comments.heta b/test/parse/input/comments.heta index 6f18678..dc902ad 100644 --- a/test/parse/input/comments.heta +++ b/test/parse/input/comments.heta @@ -37,3 +37,9 @@ scn4 { type: kinetic, method: {timeRange: [0,120], timeStep: 2, solver: lsoda} }; + +scn5 { + class: Model, + //scope: one, + //type: kinetic +}; diff --git a/test/parse/output/comments.json b/test/parse/output/comments.json index ac47597..bfe0f37 100644 --- a/test/parse/output/comments.json +++ b/test/parse/output/comments.json @@ -55,5 +55,10 @@ "timeStep": 2, "solver": "lsoda" } + }, + { + "action": "upsert", + "id": "scn5", + "class": "Model" } ]