语言的CFG
CFG for language
我正在尝试创建生成以下语言的 cfg:
This language is context-free and could be generated by a cfg?如果是,如何创建生成这种语言的语法?
我在为 cfl 创建 cfg 方面没有太多经验。如果能提供任何帮助或解决方案,我将很高兴
首先,您知道如何为 {a^n d^t | n = t}
语言创建 CFG 吗?这将是您的起点。
S -> aSd | epsilon
从这里开始,您需要扩展当 a
多于 d
或 d
多于 a
时发生的情况。目标始终是确保左侧每消耗 a
或 b
,右侧就会消耗 c
或 d
。
S -> aSd | aAc | bDd | epsilon
A
是a
比d
多的情况,D
是另一种情况。在每一个中,你需要为每个右字符消耗一个左字符。
还有一种情况,就是n
和t
其中一个或两个都是0
的情况。我会留给你来决定如何处理它。
那你就得处理运行一方的性格了。例如,如果您处于 A
状态,您希望将 a
s 与 c
s 匹配,直到 a
s 运行 输出并变成 b
秒。像,
A -> aAc | bCc
剩下的就交给你了。
我正在尝试创建生成以下语言的 cfg:
This language is context-free and could be generated by a cfg?如果是,如何创建生成这种语言的语法?
我在为 cfl 创建 cfg 方面没有太多经验。如果能提供任何帮助或解决方案,我将很高兴
首先,您知道如何为 {a^n d^t | n = t}
语言创建 CFG 吗?这将是您的起点。
S -> aSd | epsilon
从这里开始,您需要扩展当 a
多于 d
或 d
多于 a
时发生的情况。目标始终是确保左侧每消耗 a
或 b
,右侧就会消耗 c
或 d
。
S -> aSd | aAc | bDd | epsilon
A
是a
比d
多的情况,D
是另一种情况。在每一个中,你需要为每个右字符消耗一个左字符。
还有一种情况,就是n
和t
其中一个或两个都是0
的情况。我会留给你来决定如何处理它。
那你就得处理运行一方的性格了。例如,如果您处于 A
状态,您希望将 a
s 与 c
s 匹配,直到 a
s 运行 输出并变成 b
秒。像,
A -> aAc | bCc
剩下的就交给你了。