在不使用生成器的情况下从BNF编写语法分析器(解析器)

时间:2015-01-14 22:49:51

标签: abstract-syntax-tree bnf

我有兴趣从BNF语法编写解析器(语法分析器)而不使用像yacc或bison这样的生成器工具。

我以简单算术表达式的BNF为例:(摘自Dragon Book 2.2.6)

expr -> expr + term | expire - term | term
term -> term * factor | term / factor | factor
factor -> number | (expr)

假设我想创建等效代码。

我想我应该创建三个名为parseExprparseTermparseFactor的函数。

如何构建有关向上定义的BNF的这些功能?

parseFactor似乎很明显:

  1. 获取令牌类型
  2. 如果类型编号返回数字类型的节点
  3. 如果令牌代表左括号,请获取parseExpr
  4. 返回的节点
  5. 检查下一个标记是否为右括号。如果是,则返回在3获得的节点。如果否,则抛出错误
  6. 对于parseExpr,我对如何开始和解释制作感到有点困惑:expr -> expr + term | expire - term | term

    如何翻译此作品?如何检测哪种情况适用?最后一次制作的问题是什么?

0 个答案:

没有答案
相关问题