文法产生式 (6)

上面的参数列表文法产生式中用id表示标识符,epsilon表示空字符串,param表示形参。 这个文法产生式某种意义上来说是”不完整“的, 因为它没有将id与params推导到字符级别,但有时候为了方便理解,就这么写了。

除此之外,文法产生式是很严谨的,连参数之间的逗号和函数调用的括号都要考虑在内,因为param仅代表一个字符串,不包含逗号在内。

运算符的优先级

到现在可以看到文法生成式算得上是一种严谨的”数学推导“了,而且它还能表示运算符号的优先级。

考虑 +-:左结合 */:左结合 优先级 */ > +-

expr -> expr - term | expr + term | term term -> term * factor | term / factor | factor factor -> digit | (expr)

语法树的翻译是从叶子节点开始的,因此可以区分出优先级,子树的运算优先级比其父节点高。

factor是最小的运算单位,表示不能被其它任何运算符分开的表达式。

上面这个文法可以实现*/优先级比+-高,但是他也能表示2 *(1+3)这类语句。

后缀表达式

上面的文法都是中缀形式,后缀可以写成E -> E E op | digit

C语句的子集的文法

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zypzdd.html