编译的每个阶段都有可能检测出源程序中存在的错误,比如:词法分析程序检测非法字符,语法分析程序能够发现不合语法规则的错误(如括号不匹配,缺少运算符对象),语义分析程序针对的是语法正确但所涉及的运算毫无意义(比如运算对象的类型不匹配,变量没有声明,数组下标越界,除数为0)
字母表指的是符号的非空有限集合
假设字符串的长度为n
符号串a的前缀指的是从符号串a的末尾删除0个或者多个符号之后得到的符号串(n+1)
符号串a的后缀指的是从符号串a的开头删除0个或者多个符号之后得到的符号串(n+1)
符号串a的子串指的是删除了符号串a的前缀或/和后缀后得到的符号串(n的累和+1)
符号串a的子序列指的是删除了符号串a的0个或者多个符号之后后得到的符号串(2 的n次方)
符号串ab(是将b连接在a之后得到的符号串)
语言指的是在某个确定字母表上的符号串集合(空串也是语言)
语言L的n次幂是其与自身(n-1)次的连接。
语言与其0次以上的连接成为闭包。
语言与其1次以上的连接成为正闭包。
文法的定义G=(VT,VN,S,产生式的字母代替FAI(暂时没有找出这个符号的打出方法))书本21页有
VT是终结符,VN是非终结符,S是文法开始符号
两种重要的文法:
上下文无关文和正规文法(书本22页)
终结符推出符号串就是上下文无关文法
A->a或者A->aB右线性文法
A->a或者A->Ba左线性文法
判断是什么线性就看右侧表达式非终结符的位置(在那边就是那个)
推导过程中E代表表达式,F代表因子,T代表项
子树与短语的定义在书本26页(太多,看了很多题目好像设计很少,而且语法分析表好像用的比较多)
左递归的消除
通俗点讲就是见到A->Aa1|Aa2|Aa3|......B这种样子的直接替换成
A->BA撇
A撇->a1A撇|a2A撇|a3A撇| ......空串