开发生成语言的上下文相关语法

Develop a context-sensitive grammar that generates the language

谁能解释一下如何创建生成语言的上下文相关语法

L={i^n j^n k^m l^m | n,m ≥ 1}

这是我目前得到的:(我不确定它是否正确)

S → IJ
I → iIX | iX; 
J → jJl | jYl; 
Xj → jX;
XY → Yk;
Y→ε.

如果你能一步一步地解释,如何正确地做,或者如何检查答案的任何路径,我将不胜感激。因为看了书上的CFG(CSG)我都觉得自己完全不知道怎么解决这些问题了。

谢谢。

语言定义L={i^n j^n k^m l^m | n,m ≥ 1}表示非零数量的i后跟与i数量相同的j后跟一个不同的非零数量的 k 后跟与 k 相同数量的 l

因此,从生成语言的两个独立部分的起始规则开始:

1. S → XY

添加生成 1 ij 和 1 kl 的规则:

2. iXj → ij
3. kYl → kl

添加生成多个 'nested' 集合的规则:

4. X → iXj
5. Y → kYl

例如iijjkkklll的生成链是:

→1 XY
→4 iXjY
→4 iiXjjY
→2 iijjY
→5 iijjkYl
→5 iijjkkYll
→5 iijjkkkYlll
→3 iijjkkklll