编译原理之词法分析器

项目代码:https://github.com/you520569/lexAnalyse
词法分析器效果图

总体设计思路

逐一扫描输入的编程代码,利用状态转换图识别出单词
状态转换图

主要全局变量

  • str :保存输入的编程代码
  • strTaken: 保存识别的单词
  • row: 行数
  • line: 列数
  • ch: 当前读取的字符
  • it: 当前读取的字符位置
  • key[]: 保存关键字
  • div[]: 保存分界符
  • math[]: 保存运算符
  • relation[]: 保存关系运算符
  • ID[]: 保存标识符
  • Const[]: 保存常数

主要的函数模块

  • getChar(): 获得下一个字符,并存入ch中
  • getEnter():碰到’\n’,row加一,line等于一,用于显示当前单词位置
  • getBC(): 判断ch是否是空白或者回车,是则用getchat直至ch为非空白,去除空格或’\n’ (用于开始识别单词前,确保获取的第一个字符不是空格或者’\n’)
  • conCat(): 将ch中的字符接到strTaken中
  • reserve(): 判断strTaken是否为保留字,否返回0,是返回编码
  • reserve_math(): 判断strTaken是否为算术运算符
  • reserve_div():判断strTaken是否为分界符
  • reserve_relation():判断strTaken是否为关系运算符
  • reTract(): 将搜索指示器回调一个字符位置,将ch置为空白字符
  • InsertId():将strTaken中的标识符插入符号表,返回所在位置
  • InsertConst():将strTaken插入常数表,返回所在位置
  • lex_analyse():主函数

lex_analyse()函数运行过程

识别常数过程简析


其余的原理类似,就不多写了...  

本文标题:编译原理之词法分析器

文章作者:定。

发布时间:2016年10月28日 - 17时10分

本文字数:678字

原始链接:http://cocofe.cn/2016/10/28/编译原理之词法分析器/

许可协议: Attribution-NonCommercial 4.0

转载请保留以上信息。