私はPEG.jsで遊んで読んでいて、ネイサンズ大学で自分の言語を構築する方法を「説明」するのに良いものを見つけましたが、このステップで立ち往生しています
わかりprimary
ません 説明してください
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); }
テスト
var parse = wrapExceptions(PEG.buildParser(answer).parse);
assert_eq(parse("1+2"),
{tag:"+", left:1, right:2},
"parse 1+2");
assert_eq(parse("1+2*3"),
{tag:"+", left:1, right:{tag:"*", left:2, right:3}},
"parse 1+2*3");
assert_eq(parse("1,2"),
{tag:",", left:1, right:2},
"parse 1,2");
assert_eq(parse("1,2+3"),
{tag:",", left:1, right:{tag:"+", left:2, right:3}},
"parse 1,2+3");
assert_eq(parse("1*2,3"),
{tag:",", left:{tag:"*", left:1, right:2}, right:3},
"parse 1*2,3");
私の質問は/ "(" comma:comma ")"
、エントリに括弧がない場合、その行を削除すると最後のテストが失敗する理由です