对于很多书写系统,都用空格分离文字
- 但是我们想把标点标记为分开的tokens(U.K. 10,000,000)
- 有时候不能用空格拆分(isn’t)
regular expression正则表达式
用更复杂 sophisticated 的 pattern 描述 token 边界以上下文依赖方式,通常用regular 表达(regexes)
给定有限的字母表,regexes和他们的matches可以通过连续的循环定义:
1 空字符和单字符 in 这个集合的是该集合的regex,且自匹配
2 如果r1 r2都是这个集合的regexes,
- 那么他们的concatenations(r1r2)也是regexes,且concatenation们互相匹配
- 他们的alternation(r1|r2)也是regex,且与那些与r1匹配或者r2匹配的string 都匹配
3 用Kleene star 得到的新的regex r* 与那些用0或者更多的匹配单个r的str 的contatenation 相匹配
a*~{a,空集,aa,aaa…}
一个正式语言(定长度的任意字母str集合)是个regular languages(也就是由用regular 表达表示的词组成)
有些simple正式语言不regular:例如twin language{ww|w属于{a,b}*}
Finite state acceptors 是定长state的机器,接受字母序列,给出accept和reject
- 有明确的start state
- 一系列设计的接受状态
- 他们的transition 带着有限字母表的符号标签,或者空字符
FS acceptor接受那些输入如果有一些列变换,从开始状态开始,以accepting state结束,或者变换标签的链接是问题的输入