ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] ## 词法 - 词法就是构词的方法(例如:有哪些词性?有哪些字母?有哪些词语?) - 编译器制作过程中我们通常用**正则表达式**来表述词法;然后用**状态机** 来实现正则表达式 ## 串和语言 - 字母表( alphabe):语言L允许的所有字符(如:ansi,utf8) - 串( string)是语言L字母表中字母的一个有穷序列;通常用希腊字母Ƹ代表**空串** - 不可能所有的串都是语言支持的,因此我们通常用一些约束规则来描述串,其中就有正则表达式 ## 词法分析器的目标 - 给定程序语言(L)以及所有L支持的词汇,从中找出这些词汇并为他们标注词性 - 如果源代码中有语言(L)不支持的词汇,报错并提示用户 ## 正则表达式 - 用于正则语言(一种形式语言)的词法;用一串字符串来描述正则语言L接受哪些词语,而不需要理解这些词语 - 最早由 Kleene提出,在Unix釆用后被大众认可(grep,sed等 - 正则语言可以被确定、有限状态的自动机理解 ## 最简问题:区分关键词和变量名 - 关键词和变量名都以字母下划线开头,但又有所区别 - 正则表示 `[_a-zA-Z][a-zA-Z0-9]*`(解释:开头为_和字母的字符串) - 状态机描述 ![](https://img.kancloud.cn/20/83/20830e94aec20ee2b5c1f4c03764afb5_800x192.png)