1. 语法分析的核心概念解析
语法分析是编译器前端的关键环节,它负责将词法分析器生成的词法单元序列转换为语法树,验证源代码是否符合编程语言的语法规则。龙书第四章将语法分析技术分为两大流派:自顶向下分析和自底向上分析,就像建筑工地的两种施工方案——前者像搭积木从屋顶开始构建,后者像打地基从砖块开始堆砌。
**上下文无关文法(CFG)**是语法分析的数学基础,它由四元组(V, Σ, P, S)构成。我常把它比作乐高说明书:V是非终结符(待组装的部件),Σ是终结符(基础积木块),P是产生式规则(组装步骤),S是开始符号(最终成品)。例如简单算术表达式的文法:
E → E + T | T
T → T * F | F
F → ( E ) | id
二义性文法是新手常踩的坑。比如条件语句的"dangling else"问题:
stmt → if expr then stmt
| if expr then stmt else stmt
| other
当出现嵌套if时,else该匹配哪个if?龙书介绍了两种解决方案:修改文法引入显式终结符,或通过优先级规则约束解析器行为。
2. 自顶向下分析实战
预测分析法(LL分析)是最直观的自顶向下技术,它像一位严格的指挥官,总是根据当前输入和栈顶符号决定下一步动作。我实现过一个简易的LL(1)分析器,关键点在于计算FIRST和FOLLOW集:
def compute_first(grammar):
first = defaultdict(set)
changed = True
while changed:
changed = False
for nt in grammar.nonterminals:
for prod in grammar.productions[nt]:
for sy

:第四章语法分析实战解析与习题精讲&spm=1001.2101.3001.5002&articleId=155650682&d=1&t=3&u=7f9da80e10004b118d4554dd32b2e008)
1万+

被折叠的 条评论
为什么被折叠?



