词法分析-----词法扫描器的设计实现

从左至右逐个字符地对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为单词符号串的中间程序。词法分析器的功能是输入源程序,输出单词符号,并保存token的内容。程序语言的单词符号分为以下六种:iT标识符、cT字符、sT字符串、CT常数、KT关键字、PT界符。

二、实验内容 2.1概要设计

 

词法分析器,实现固定语法的识别,就要明白什么是词法分析器,它的功能是什么。词法分析是编译程序进行编译时第一个要进行的任务,主要是对源程序进行编译预处理(去除注释、无用的回车换行找到包含的文件等)之后,对整个源程序进行分解,分解成一个个单词,这些单词有且只有6类,分别是标识符、保留字、常数、字符、字符串、界符。以便为下面的语法分析和语义分析做准备。词法分析是所有后续工作的基础,如果这一步出错,比如明明是<=’却被拆分成‘<’和‘=’就会对下文造成不可挽回的影响。因此,在进行词法分析的时候一定要定义好这6种符号的集合。

词法分析器的设计包括:读取文件里的内容、有限自动机的设计、将读取的token序列存入字典之后按照文件里单词的顺序输出。其中有限自动机的设计为词法分析器的核心,实现了对预处理之后的文件中的token的识别。有限自动机通过分析当前读入的字符,跳转到下一状态,直到进入终止状态。并且根据当前token的终止状态,判断出token所属的类型码,存入相应的符号类型表。

  

词法分析-----词法扫描器的设计实现

 

 

 


  

2.2数据结构

1Dicttoken序列建立字典,键是分割出的单词,值是单词所属的类型码

2)词法分析类Scanner:

 

3 Scanner的数据成员

数据成员

 

countt,  IDentifierTbl[1000][20]

 

i标识符表和其对应的计数器

 

countct, SingleChar[1000]

 

c字符表和其对应的计数器

 

counts, StringChar[1000][20]

 

S字符串表和其对应的计数器

 

countc, ConstantTbl[1000][20]

 

CT常数表和其对应的计数器

 

operatorOrDelimiter[36][10]

 

P界符表

 

reserveWord[32][20]

 

K关键字表

 

resourceProject[10000]

 

输入源程序的存放处

 

Token[]

 

每次分析出来的单词

 

 

 

 

 

 

4 关键函数

成员函数

 

int searchReserve(char reserve[][20],char s[])

 

搜索解析出来的单词在二维字符数组中是否出现

 

int searchRReserve(char reserve[],char s)

 

搜索解析出来的单词在一维字符数组中是否出现

 

bool IsLetter(char letter)

bool IsDigit(char digit)

 

判断当前字符是否是数字或字符,返回布尔型

 

void filterResource(char r[],int pProject)

 

过滤掉注释的部分,得到一个纯净的代码

 

void Scanner(int &syn,char resourceProject[],char token[],int &pProject)

 

生成token序列,同时将序列输出到文件里

 

int main()

 

运行主函数,进行文件数据输入

 

 

  初始化标识符表,字符表,字符串表,字符表,界符表,关键字表和定义存储字符数组表称全局变量,所以不需要初始化函数,变量的调用也方便

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgpsp.html