程序设计语言|正规式

程序设计语言|正规式,第1张

词法分析是把构成源程序的字符串转换成单词符号序列。词法规则可用 3型文法 (正规文法)或正规表达式描述,他产生的集合是语言基本字符集Σ(字母表)上的字符串的一个子集,称为正规集。

正规式是一种表示正规集的工具,正规式是描述程序语言单词的表达式,对于字母表Σ。

正规式(正规表达式)的运算符有3个,优化级从高到低顺序排列为:*(闭包)、·(连接,可省略)、|(或)。

正规式  →  正规集

ab  →  字符串ab构成的集合

a|b  →  字符串a、b构成的集合

a*  →  由0个或多个a构成的字符串集合

(a|b)*  →  所有字符a和b构成的串的集合

a(a|b)*  →  以a为首字符的a、b字符串的集合

(a|b)*abb  →  以abb结尾的a、b字符串的集合

有限自动机可以转换为正规式,正规式也可以转换为有限自动机。

词法分析器的构造步骤:

1)用正规式描述语言中的单词构成规则。

2)为每个正规式构造一个NFA,它识别正规式所表示的正规集。

3)将构造出的NFA转换成等价的DFA。

4)对DFA进行最小化处理,使其最简。

5)从DFA构造词法分析器。

个人感觉画出NFA最直观易懂了。前一个正规式仅有一个状态(开始和接受状态同),后一个虽然是三个状态,但是其中一个是绕着a闭包的状态,一个是绕着b闭包的状态,而这两个状态又是绕着第三状态(既是开始状态又是接受状态)进行闭包,所以实际上可合并为一种状态,即是说这两个正规式对应于同一个NFA,所以相等是显然成立的。

//必须十一位数,包括数字和字母,且以字母开头

Pattern pattern = Pattern.compile("^[a-zA-Z][a-zA-Z0-9]{10}$")//将给定的正则表达式编译到模式中

//判读存款金额是否合法(单次存款金额不超过10000元(包括),且必须是100的整数倍)

Pattern pattern = Pattern.compile("^[1-9][0-9]{0,1}00$|^10000$")

//判断取款金额是否合法(单次取款金额不超过3000(包括)元,且必须是100的整数倍.)

Pattern pattern = Pattern.compile("^[1-3][0-9]{0,1}00$")


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11184746.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存