August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
对于如何理解表达式的含义,已经有标准的解决方法了:首先读入符号,将它们组合为单词。因此,如果键入
程序应该产生如下单词列表:
一个单词就是一个字符序列,用来表示一个基本单元,例如数字或者运算符。
在产生单词之后,我们的程序必须保证对整个表达式正确解析。例如,我们知道表达式45+11.5/7的计算顺序是45+(11.5/7)而不是(45+11.5)/7,但如何告诉程序这些有用的规则呢(例如除法比加法优先级高)?标准的方法就是设计一个文法(grammar)来定义表达式的语法,然后在程序中实现这些文法规则。例如:
这是一个简单的规则集合,最后一条规则读作“一个Number是一个浮点常量”,倒数第二条规则表明“一个Primary是一个Number,或者是'('后接一个Expression再接一个')'”。针对Expression与Term的规则类似,都是依赖其后的规则来定义。
如6.3.2节,我们从C++定义中借用了如下几类单词:
·浮点常量:与C++定义相同,如3.14、0.274e2和42等。 ...