编译原理初探(三)

词法分析


welcome

词法分析原理

将源程序看做是字符流并进行切割划分,每一个部分就叫做记号或单词

源程序:

1
2
3
4
if (x > 5)
y = "hello";
else
z = 1;

转换成记号:

1
2
3
4
IF LPAREN IDENT(x) GT INT(5) RPAREN
IDENT(y) ASSING STRING("hello") SEMICOLON
ELSE
IDENT(z) ASSING INT(1) SEMICOLON EOF(结束标志)

记号数据结构

1
2
3
4
5
enum kind {IF , LPAREN , IDENT , INTLIT , ...};//词法分析器所能识别的所有记号的分类
struct token{
enum kind k;
char * lexeme; //单词
};

源程序在转换成记号前就会得到相应的结构体token

比如 if(x > 5) 得到以下 token

  • token{k = IF , lexeme = 0};
  • token{k = LPAREN , lexeme = 0};
  • token{k = IDENT , lexeme = “x”};
  • token{k = GT , lexeme = 0};
  • token{k = INT , lexeme = 5};
  • token{k = RPAREN, lexeme = 0};
  • token{k = EOF, lexeme = 0};

小结

词法分析器的任务:字符流到记号流

  • 字符流:和被编译的语言密切相关 (ASCII , Unicode等)
  • 记号流: 编译器内部定义的数据结构,编码所识别出的词法单元

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 词法分析原理
  2. 2. 记号数据结构
  3. 3. 小结