Javascript 你能解释什么是必要的吗?这是一个额外的规则
我在游戏和阅读中,我发现了一个很好的“解释”如何构建自己的语言,但我坚持这一步 我不懂Javascript 你能解释什么是必要的吗?这是一个额外的规则,javascript,peg,Javascript,Peg,我在游戏和阅读中,我发现了一个很好的“解释”如何构建自己的语言,但我坚持这一步 我不懂主要的可以给我解释一下吗 start = comma comma = left: additive "," right:comma { return {tag: ",", left:left, right:right}; } / additive additive = left:multiplicative "+" right:additive
主要的可以给我解释一下吗
start =
comma
comma =
left: additive "," right:comma
{ return {tag: ",", left:left, right:right}; }
/ additive
additive =
left:multiplicative "+" right:additive
{ return {tag: "+", left:left, right:right}; }
/ multiplicative
multiplicative =
left:primary "*" right:multiplicative
{ return {tag: "*", left:left, right:right}; }
/ primary
primary =
integer
/ "(" comma:comma ")" # Can explain me why is necesary "(" and ")"
{ return comma; }
integer =
digits:[0-9]+
{ return parseInt(digits.join(""), 10); }
测试
我的问题是为什么必须使用/“(“逗号:逗号”)”
如果条目没有括号,如果删除该行,则最后一次测试失败对于主规则
来说,所讨论的行是另一个表达式的第一部分——仅当整数
不匹配时才进行测试
此备用表达式在/
之后开始,并包含相应的操作块:{return comma;}
请注意,“逗号”在这里以两种不同的方式使用——既作为规则名称,也作为标签标识符。见:
标签:表达式
匹配表达式并记住其在给定标签下的匹配结果。标签必须是JavaScript标识符
所以,integer/“(“逗号:逗号”)”
首先尝试匹配integer
;如果失败,它将尝试匹配整个第二个表达式
标签可以是任何有效的JavaScript标识符。请考虑下面的片段,它在功能上相当于你的例子:
primary =
integer
/ "(" result:comma ")"
{ return result; }
如果括号不相关,则可以省略整个第二个表达式,只留下:
primary =
integer
作为标签的另一个快速示例,这也会起作用(但是多余的):
这可能很明显,但是主
不是一个整数
就是一个逗号
被()
s包围。你到底怀疑什么?如果你去掉“/”(“逗号:逗号”)“`行,样本就不正确;想想/
后面的两行,比如函数(逗号){return comma;}
。您只删除了函数(逗号)
部分,显然留下了后面的相关{return comma;}
部分?如果删除有问题的行,还必须删除相关操作。。。
primary =
integer
primary =
anumber:integer
{ return anumber; }