词法&语法
词法的意思是构造词语的方法,例如「游泳」这个词语,首先它是个动词,然后我们用了「游」和「泳」两个字,所以如果我们要构造一个词语,我们首先要考虑有哪些字可以用,因为词语都是字构成的,其次我们再考虑我们构造的词语的词性是什么,是动词、名词、还是形容词或者其他之类的。
语法则是造句的方法,因为一个语句是由词语构成的。
在编译器的制作过程中,我们使用正则表达式来表述词法;然后用状态机来实现正则表达式。
串&语言
- 字母表(alphabet):一个语言所支持的所有字符(如:ASCII、UTF8)
- 串(string):语言中字母表的一个有穷序列,比如「apple」就是英语的一个串、「你好」就是中文的一个串。也有「空串」的概念。
- 不可能所有的串就是语言支持的,比如「好你」在中文中就不是个有效的串,所以我们需要一些规则来约束串,其中就有正则表达式。
词法分析器的目标
- 给定程序语言 L 以及所有 L 支持的词汇,从中找出这些词汇,并为他们标注词性。
- 如果源代码中有语言不支持的词汇,报错并提示用户。
正则表达式
可用于正则语言,用一串字符串来描述正则语言支持哪些词语,但正则语言本身不需要理解这些词语,比如:/apple|banana/,这个正则表达式表示我接收 apple 和 banana 这两个词语,但是正则表达式本身并不需要理解词语的含义。