编译器的词法分析是基于finite automata(有穷自动机) 和 regular expression(正则表达式)
alphabet:finite set of symbols 字母表:有限符号的集合
string:sequence of symbols from a given alphabet 字符串:给定字母表的符号序列
language:set of string 字符串的集合
例如x12 = 32;中有token
x12 identifier
= assignment
32 unsigned int
; end of statement
这里的4个token其实可以看作4门语言 每门语言都有其独特的字符构成
当把一个string(或者说一个token)传给finite automata或者regular expression的时候 它会返回告诉你这是不是一个合法的token 是不是一个属于它的语言的token
finite automata和regular expression作为一个工具来识别语言只能识别regular language(标准语言)
DFA相对来说要求会更加严格 每一个可能的输出都有且只有一条输出
L = { w | w contains 101 as substring}