软考第二章

0 阅读2分钟

语言处理程序

image.png

词法分析:

从左到右逐个扫描源程序中的字符,识别其中如关键字、标识符、常数、运算符及分隔符等。输出记号流

语法分析:

根据语法规则将单词符号分解成各类语法单位,并分析源程序是否存在语法上的错误。包括语言结构出错,if...end不匹配,缺少分号、括号不匹配、表达式缺少操作数等。

image.png 自上而下分析法(递归下降分析法、预测分析法都是自上而下) 自底向上分析法(移进-归纳分析法)技巧归-归并

语义分析:

进行类型分析和检查,主要检测程序是否存在静态语义错误。包括:运算符和运算类型不符合,如取余时用浮点数。

动态错误

  • 发生在程序运行时
  • 也叫动态语义错误
  • 陷入死循环、变量取零做除数、引用数组下标越界等

静态错误(词法错误、语法错误、静态语义错误)

  • 编译时所发现的程序错误
  • 分为语法错误和静态语义错误
  • 语法错误包含:单词拼写错误、标点符号错误、表达式中缺少操作数、括号不匹配等有关语言结构上的错误
  • 静态语义分析:运算符与运算对象类型不符合等错误

考点:文法

  • 一个形式文法是一个有序四元组G=(V,T,S,P),其中: 1、V:非终结符。不是语言组成部分,不是职中结果,可以理解为占位符 2、T:终结符。是语言的组成部分,不是最终结果,可以理解为占位符 3、S:起始符。是语言的开始符号。 4、P:生产式。用终结符代替非终结符的规则。形如a→b
  • 正则闭包:A﹢=A¹UA²....(也就是所有幂的组合)
  • 闭包:A+=AºUA﹢(在正则闭包的基础上,加上Aº={ε})
  • 例如:A*={a,aa,aaa,...,ε}

重点:ε表示0个,*表示0-n个、﹢表示1-n个 口诀:加1、乘0 乔姆斯基将文法分为4种类型,程序语言设计的大多数语法现象可用其中的上下文无关文法描述。