lex 学习笔记

1. lex 工作原理

1.1. lex 执行过程:

根据规则段,建立状态机;初始状态为 INITIAL
每次从输入流中读取一个字符,根据当前状态,以及读取到的字符,进行处理;包括几种情况
1)、 当前的 token 不满足任何规则,继续读取下一个字符
2)、 当前的 token 满足一个规则,执行该规则定义的动作,并修改状态

1.2. lex 中的状态

状态定义
可在定义段中,以 %s 或 %x 自定义状态
状态转换
BEGIN 宏用于状态转换

1.3. lex 规则匹配的原则:

1)、 最长匹配原则。
2)、 早期规则  
举例来理解这两个原则:
假设有两个规则:
A
B
若当前 token 既满足 A, 又满足 B, 则继续读取下一个字符
1)、 若 newtoken 满足A,则以newtoken执行A 的动作。 这就是最长匹配原则
2)、 若 newtoken 既不满足A,又不满足B,则以 oldtoken 执行 A的动作,因为 A 在B之前,这就是早期规则
理解上述 lex 的工作原理以及匹配原则,才能更好的理解 lex 

2. lex 提供的宏及函数

input(): 
lex 调用 input() 每次获取一个字符
用户可重定义 input() 以提供自己的输入方式

output():

用户可调用 output() 每次输出一个字符
用户可重定义它
REJECT:
lex 若发现 token 匹配一条规则后,在执行完动作后, 将从输入流下一个位置开始继续处理,这个 token 就会被丢掉
REJECT 宏,可使得 token 被保留,然后继续匹配后续的规则 (注意,当前被匹配的规则不再匹配)

yylex():

unput():

yytext, yyleng:

yyless(), yymore():

yywrap()

yyin, yyout

posted @ 2010-09-01 16:26  rstevens  阅读(788)  评论(0)    收藏  举报