grammar - Peg.JS 中的左递归错误

标签 grammar pegjs

我目前正在为科学博览会制作一种编程语言。

这是我的 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]*

我收到以下错误:“检测到规则‘语句’存在左递归。” 但我不明白为什么会发生这种情况。

最佳答案

您有Statements = statementsState,它是左递归的。

使用PEG时,最好写成Statements = Statement+,或者Statements = Statement Statement*

关于grammar - Peg.JS 中的左递归错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28129488/

相关文章:

php - PHP 是一种完全上下文无关的语言还是有上下文敏感的部分?

java - 使用 Sphinx4 识别关键字或关键词

parsing - 在词法输入序列时指定文字的字符名称是什么?

parsing - 转移/减少 Bison 的冲突

Python 源代码 - 更新语法

不使用左手递归解析 bool 表达式

javascript - 如何使用 PEG.js 的示例

peg - 为什么这个 peg 语法不能识别 42?

json - TS2307 : Cannot find module or its corresponding type declarations