gpt4 book ai didi

javascript - PEGJS:如何传递语法

转载 作者:行者123 更新时间:2023-11-30 05:36:59 25 4
gpt4 key购买 nike

引自PEGJS Tutorial :

To generate a parser, call the PEG.buildParser method and pass your grammar as a parameter:

var parser = PEG.buildParser("start = ('a' / 'b')+");

我的语法有点复杂:

start
= additive

additive
= left:multiplicative "+" right:additive { return left + right; }
/ multiplicative

multiplicative
= left:primary "*" right:multiplicative { return left * right; }
/ primary

primary
= integer
/ "(" additive:additive ")" { return additive; }

integer "integer"
= digits:[0-9]+ { return parseInt(digits.join(""), 10); }

我应该将语法的起始规则传递给 PEG.buildParser,即 additive,但我无法正确处理。如果我写PEG.buildParser(additive)PEG.buildParser(start),FireBug 说SyntaxError: 应为“=”或字符串,但已找到输入结尾;如果我写 PEG.buildParser(start = additive),我会得到 GrammarError: Referenced rule "additive"does not exist;传递我的语法的正确方法是什么?

最佳答案

完整的语法必须作为字符串解析到buildParser,例如

PEG = require('pegjs');
var parser = PEG.buildParser(
'start\n' +
' = additive\n' +
'\n' +
'additive\n' +
' = left:multiplicative "+" right:additive { return left + right; }\n' +
' / multiplicative\n' +
'\n' +
'multiplicative\n' +
' = left:primary "*" right:multiplicative { return left * right; }\n' +
' / primary\n' +
'\n' +
'primary\n' +
' = integer\n' +
' / "(" additive:additive ")" { return additive; }\n' +
'\n' +
'integer "integer"\n' +
' = digits:[0-9]+ { return parseInt(digits.join(""), 10); }'
);
console.log(parser.parse('(1+2)*3'));

关于javascript - PEGJS:如何传递语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23091412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com