diff --git a/parser/bnf.js b/parser/bnf.js index b4985ce0..7b76fde1 100644 --- a/parser/bnf.js +++ b/parser/bnf.js @@ -81,32 +81,23 @@ compiler.ParseScript = function (script) { const aqLiterals = [] let _script = script let res = '' - let qsMatch = _script.match(/^([^"]*)("([^"\\]|\\.)*")?/) + const re = /^([^"`]*)("(([^"\\]|\\.)*)"|`(([^`\\]|\\.)*)`)?/ + let qsMatch = _script.match(re) while (qsMatch && qsMatch[0]) { - let repl = qsMatch[2] || '' + let repl = qsMatch[2] || qsMatch[4] || '' if (repl.length > 512) { - qLiterals.push(repl) - repl = `"QL_${qLiterals.length - 1}"` + if (repl.startsWith('"')) { + qLiterals.push(repl) + repl = `"QL_${qLiterals.length - 1}"` + } else { + aqLiterals.push(repl) + repl = `\`AL_${aqLiterals.length - 1}\`` + } } res = res + qsMatch[1] + repl _script = _script.slice(qsMatch[0].length) - qsMatch = _script.match(/^([^"]*)("([^"\\]|\\.)*")?/) + qsMatch = _script.match(re) } - - _script = res - res = '' - qsMatch = _script.match(/^([^`]*)(`([^`\\]|\\.)*`)?/) - while (qsMatch && qsMatch[0]) { - let repl = qsMatch[2] || '' - if (repl.length > 512) { - aqLiterals.push(repl) - repl = `\`AL_${qLiterals.length - 1}\`` - } - res = res + qsMatch[1] + repl - _script = _script.slice(qsMatch[0].length) - qsMatch = _script.match(/^([^`]*)(`([^`\\]|\\.)*`)?/) - } - const parsedScript = this._ParseScript(res) if (!parsedScript) { return parsedScript diff --git a/parser/registry/common.js b/parser/registry/common.js index 80fd2384..8857a99d 100644 --- a/parser/registry/common.js +++ b/parser/registry/common.js @@ -85,9 +85,11 @@ module.exports.querySelectorPostProcess = (query) => { * @returns {string} */ module.exports.unquoteToken = (token) => { - let value = token.Child('quoted_str').value - value = `"${value.substr(1, value.length - 2)}"` - return JSON.parse(value) + const value = token.Child('quoted_str').value + if (value.startsWith('"')) { + return JSON.parse(value) + } + return value.substr(1, value.length - 2) } /**