这是我参与「第五届青训营 」笔记创作活动的第7天
一、本文内容:
-
上下文无关语法
-
巴科斯范式
-
递归下降算法
二、详细介绍
上下文无关语法
上下文无关语法指语言句子无需考虑上下文,就可以判断正确性,如:
a = b+c;
这是一个赋值语句,无论此语句的前后是什么代码,此语句所代表的操作是确定的。即给变量a赋值等于b+c
上下文无关语法G:终结符集合T + 非终结符集合N + 产生式集合P + 起始符号S
巴科斯范式
BNF是描述上下文无关理论的一种具体方法,通过BNF可以实现上下文无关文法的具体化、公式化、科学化,是实现代码解析的必要条件。BNF本质上就是树形分解,分解成一棵抽象语法树。
递归下降算法 Recursive Descent Parsing
递归下降法是另一种自顶向下的语法分析方法。
在定义语法分析程序的时候,每一个非终极符都定义成一个过程或者函数:每棵子树都是以根节点的非终极符推导出来的短语,可以考虑每个非终极符构造一个函数,去匹配子树的叶节点。
从树中即可看出,加入每一个非终极符都定义成一个过程或者是函数,选择一个规则的时候就让它和规则的右边进行匹配,遇到终极符就可能直接匹配上了,遇到非终极符还是要调用该非终极符所对应的过程或者是函数。
对于一个非终结符,要从左到右依次匹配其产生式中的每个项,包括非终结符和终结符。
在匹配产生式右边的非终结符时,要下降一层,继续匹配该非终结符的产生式。
如果一个语法规则有多个可选的产生式,那么只要有一个产生式匹配成功就行。如果一个产生式匹配不成功,那就回退回来,尝试另一个产生式。这种回退过程,叫做回溯(Backtracking)。
本文如有不足之处,欢迎大家指出