Я хочу закодировать это, но я застрял
Итак, предположим, у нас есть грамматика
S→x|LR|LT
T→SR
L→(
R→)
Вот как будет выглядеть список после каждого l oop:
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. Я l oop по LR и расширяю L до соответствующих значений RHS, которые будут (R. Это сделано. Тогда я хочу расширить R в LR, теперь я должен использовать L, а не (чтобы я мог достичь L). Хотя зацикливаясь, как я могу получить L, когда мой индекс перемещается в R?
Предположим, я расширяю 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 с (. Тогда, когда я получил (R я должен снова вернуть L и расширить R, чтобы я получил L) .. поэтому мое окончательное расширение L будет (L и R)
Спасибо