5.3. 语法分析¶
5.3.1. 简介¶
语法分析以词法分析生成的单词符号序列作为输入,根据语法规则识别出语法成分。
5.3.3. 语法¶
5.3.3.1. 上下文无关语法¶
上下文无关语法(context-free grammar)有四个模块
一组终结符(terminal symbols),有时候又叫token
一组非终结符(nonterminal)syntactic variables.
一组产生式(productions)
一个非终结符作为起始符号
5.3.3.2. 二义性文法¶
ambiguous grammars
5.3.4. 错误处理¶
错误发生时,有一些可选的方法,最简单一种处理方式是 遇到第一个错误就退出,但是当错误很多的时候,最好能够容忍,并报出之后的错误。
5.3.4.1. Panic-Mode Recovery¶
当遇到错误的时候,就开始丢弃遇到的符号,直到遇到一个终结符,例如分号等。
5.3.4.2. Phrase-Level Recovery¶
这个方式是遇到错误的时候,替换一个能让当前parse执行下去的符号。
5.3.4.3. Error Productions¶
把错误的产生式加到语法解析里面。
5.3.4.4. Global Corrections¶
还有一种做法是找到一个最近的能正常parse的源程序然后往下,但是这种做法太过消耗时间和空间资源,实际情况下使用的情况较少。