2

私は現在、サイエンス フェア用のプログラミング言語を作成しています。

これは私の PEG.js 文法です:

start
  = s:Statements
    { return ['Program', {}].concat(s); }
  / _

Statements
  = s:Statement ";"
    { return s; }
  / ss:Statements s:Statement ";"
    { return ss; ss.push(s); }
  / _

Statement
  = SetVar

SetVar
  = i:Ident "=" e:Expr
    { return ['SetVarStmt', {}, i, e]; }

Expr
  = Ident
  / Number

Number
  = n:[0-9]+
    { return ['Number', { val: parseInt(n.join(""), 10) }]; }

Ident
  = i:[a-zA-Z._]*
    { return ['Ident', { name: i.join("") }]; }

_ = [ \t\r\n]*

次のエラーが表示されます:「ルール 'ステートメント' で左再帰が検出されました。」しかし、なぜこれが起こっているのかわかりません。

4

1 に答える 1

4

がありStatements = Statements Statement、再帰的に残されています。

PEG を使用する場合はStatements = Statement+、 、またはStatements = Statement Statement*.

于 2015-01-25T18:56:53.203 に答える