首页 > 解决方案 > 这三个非终结符(expr、term 和 factor)在这个整数算术表达式的 BNF 中是什么意思?

问题描述

这里有一套整数算术表达式的标准BNF,我想知道的是这个BNF是怎么来的?以及为什么我们需要定义以下三种非终结符(“expr”、“term”和“因素”)?

expr -> term [ ('+' | '-') term ]*
term -> factor [ ('*' | '/') factor ]*
factor -> '(' expr ')' | identifier | number

标签: bnfcompiler-construction

解决方案


从技术上讲,非终端的名称没有任何意义,至少对解析算法没有任何意义。就像程序中的变量名称一样,它们的唯一目的是为人类读者提供一些线索。

在这种情况下,名称大多只是一种约定,松散地基于数学术语。例如,如果我们写3 * 7,那么我们会说 3 和 7 是结果 (21) 的因数。没有真正的通用词3 + 7,称它们为“术语”可能比“总和”更容易。

我们把它们分开的原因是我们想描述常见的用法,意思是“和a + b * c的总和”。换句话说,“加号”或“减号”运算符的参数可以是乘积,但“倍”或“除”运算符的参数不能是和,除非它被括在括号中。(如语法所示,括号中的任何表达式都是“因素”。)ab * c


推荐阅读