请考虑以下标识符说明:"标识符是字母数字,但必须以字母数字开头 一个小写字母,可能不包含连续的大写字母。" 写一个接受这些标识符的DFA。
这是我的正则表达式,我将用于转换为DFA,但我不认为它是正确的
[a-z].( ([a-z0-9] | [a-z0-9][A-Z])* | ([a-z0-9] | [A-Z][a-z0-9])* )
答案 0 :(得分:2)
我认为正确的正则表达式是:
^[a-z][A-Z]?(([a-z0-9][A-Z]?))*$
第一个:小写(或数字) 结束后:无限小写大写?小写大写?小写大写?...
PS:如果你在正则表达式中写一个点,它将匹配任何字符。要匹配文字.
,请使用[.]
或\.
。
答案 1 :(得分:1)
S -> [a-z] A
A -> [a-z0-9] A
A -> [A-Z] B
B -> [a-z0-9] A
S - 开始状态
A,B - 最终状态