我想对此进行编码,但我被卡住了
所以假设我们有一个语法
S→x|LR|LT
T→SR
L→(
R→)
以下是列表在每个循环之后的样子:
0 steps: [ S ]
1 step: [ x, LR, LT ]
2 steps: [ (R, L), (T, LSR ]
3 steps: [ (), (), (SR, (SR, LxR, LLRR, LLTR, LS) ]
等等
假设我想检查字符串“(xx)”是否在语法中,所以我将进行 2n-1 次迭代,即 2x4-1=7 步。
我被困在如何编码以查看以下内容:
假设我在第 2 步。现在我想扩展 LR。我循环 LR 并将 L 扩展为相应的 RHS 值,这将是(R。这已经完成。然后我想在 LR 中扩展 R 现在我必须使用 L 而不是(这样我才能实现 L)。循环时如何当我的索引移动到 R 时我得到 L?
假设我正在扩展 S->LR RHS rhs 是一个列表列表
for(int j=0;j<rhs.size();j++){//size of list
//size of every inside list such as {LR}
for(int k=0;k<rhs.get(j).length();k++){
//compare every variable with L and if matches right hand side RHS of L
//then move to R
}
我的问题
在展开第 n 项时,如何将剩余的右手项添加到当前展开中以及如何添加当前展开的左手项。
示例:我正在扩展 LR。如果 L 然后 (R 所以我必须添加 R
谢谢