不包含连续大写字母的骆驼盒



考虑标识符的以下描述:"标识符是字母数字,但必须以小写字母,可能不包含连续的大写字母。" 写一个接受这些标识符的DFA。

这是我将用来翻译成DFA的正则义务,但我认为它不正确

[a-z].( ([a-z0-9] | [a-z0-9][A-Z])* | ([a-z0-9] | [A-Z][a-z0-9])* )

我认为正确的正则是:

    ^[a-z][A-Z]?(([a-z0-9][A-Z]?))*$

首先:小写(或数字)结束后:无限小写大写?小写大写?小写大写?...

ps:如果您在Regexp中写下点,它将与任何字符匹配。要匹配字面的.,请使用[.].

S -> [a-z] A
A -> [a-z0-9] A
A -> [A-Z] B
B -> [a-z0-9] A

s-开始状态
A,B-最终状态

相关内容

最新更新