【发布时间】:2017-10-27 22:08:46
【问题描述】:
我有这门课,我需要为其编写常规语法。语法是 {a,b,c},其中 a 和 c 有奇数个,但 b 有偶数个。
好字符串的例子:
- babc
- abcb
- cbba
- accaccac
- 交流
错误的字符串
- babcb
- abc
- cbbca
- 阿卡卡
- 啊
- *空字符串
我连 b 的正则表达式都是 b∗(ab∗ab∗)∗b∗(我不知道在哪里包含 c)
我的奇数 a 的正则表达式是 (c|a(b|c)*a)*a(b|c)*
我的奇数 c 正则表达式是 (c|a(b|c)*c)*c(b|c)*
我认为常规语法看起来像这样:
s -> [a], a
s -> [c], c
a -> [a], a
a -> [b], b
a -> [c], c
b -> [b]
b -> [b], b
b -> [a], a
b -> [c], c
c -> [c], c
c -> [a], a
c -> [b], b
我认为很明显我很迷茫。任何帮助表示赞赏!
【问题讨论】:
-
连 b 的正则表达式也匹配 a。
-
我不知道你的符号,但我可以为你画一个 DFA(有 8 个状态)。
-
请提供一些相应的自动机应该接受的样本输入!例如。 “aaabbc”等...
-
@repeat 添加:)
-
这是最容易解决的问题之一,方法是从语言的 DFA 开始,然后将其转换为 RE。 DFA 微不足道,有 8 个状态,跟踪 a 的 b 和 c 的数量是奇数还是偶数(从偶-偶-偶状态开始,只有奇-偶-奇状态正在接受)。