Programming languages 开发生成语言的上下文敏感语法

Programming languages 开发生成语言的上下文敏感语法,programming-languages,computer-science,Programming Languages,Computer Science,有人能解释一下如何创建一个上下文敏感的语法来生成这种语言吗 L={i^n j^n k^m L^m|n,m≥ 1} 这就是我目前得到的:(我不确定这是否正确) 如果您能一步一步地解释,如何正确地做,或者如何检查答案,我将不胜感激。因为即使在阅读了这本书中关于CFG(CSG)的内容后,我也完全不知道如何解决这些问题 谢谢。语言定义L={i^n j^n k^m L^m | n,m≥ 1} 是指非零数量的is,后面是与is相同数量的js,后面是不同的非零数量的ks,后面是与ks相同数量的ls 因此,从

有人能解释一下如何创建一个上下文敏感的语法来生成这种语言吗

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

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

如果您能一步一步地解释,如何正确地做,或者如何检查答案,我将不胜感激。因为即使在阅读了这本书中关于CFG(CSG)的内容后,我也完全不知道如何解决这些问题


谢谢。

语言定义
L={i^n j^n k^m L^m | n,m≥ 1} 
是指非零数量的
i
s,后面是与
i
s相同数量的
j
s,后面是不同的非零数量的
k
s,后面是与
k
s相同数量的
l
s

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

1. S → XY
添加用于生成1
ij
和1
kl
的规则:

2. iXj → ij
3. kYl → kl
添加用于生成多个“嵌套”集的规则:

4. X → iXj
5. Y → kYl
例如,
iijjkklll
的生成链是:

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

首先,它不可能是正确的,因为语言的描述是关于
i
j
k
l
,而你的语法使用
a
b
c
d
。非常感谢你的解释。我想说清楚:比如说,如果我有L={i^n j^n k^m L^m p^o q^o | m,n,o>=1},那么会有1.S->XYZ和pZq?如果在您指定的语言中有,
m,n,o
值是终端符号的重复次数,该怎么办。因此,是的,
S
开始规则将具有
Z
非终端符号,允许您为
p
q
终端符号提供规则
→1 XY
→4 iXjY
→4 iiXjjY
→2 iijjY
→5 iijjkYl
→5 iijjkkYll
→5 iijjkkkYlll
→3 iijjkkklll