Java CFG中的强制规则序列
我正在尝试编写一个以10开头,以10{0,1}结尾的CFG。 但我注意到,为了让它工作,我所写的规则必须以一种特殊的顺序来遵循。 让我举个例子给你看Java CFG中的强制规则序列,java,algorithm,Java,Algorithm,我正在尝试编写一个以10开头,以10{0,1}结尾的CFG。 但我注意到,为了让它工作,我所写的规则必须以一种特殊的顺序来遵循。 让我举个例子给你看 S -> 10S Rule 1 S -> S10 Rule 2 S -> 1S Rule 3 S -> 0S Rule 4 S -> ε Rule 5 Rule 1 -> 10S -> Rule 2 -> 10S10 -> Rule 3 101S10 -> Rule 4 -> 10
S -> 10S Rule 1
S -> S10 Rule 2
S -> 1S Rule 3
S -> 0S Rule 4
S -> ε Rule 5
Rule 1 -> 10S -> Rule 2 -> 10S10 -> Rule 3 101S10 -> Rule 4 -> 1010S10 -> Rule 5 101010
在这里,我将完美地以10开始,以10结束,但这仅限于规则1在序列中是第一个,并且规则2在结束之前也被考虑,规则5以101010结束
这是写这个CFG的正确方法吗?我的意思是,假设某人开始时:
Rule 1 -> 10S Rule 3 -> 10S1 -> Rule 4 -> 10S01 -> Rule 5 -> 1001.
Now my CFG doesn't hold up because I expected the Rule 2 to be involved to get the string to end with 10.
我是否应该期望我的CFG能够工作,无论首先或最后采用什么规则?这是写CFG的唯一“合法”方式吗?如果它像我的一样(取决于所采取的特定顺序),那么它被认为是错误的
事先非常感谢您的帮助,我很感激