【问题标题】:Develop a context-sensitive grammar that generates the language开发生成语言的上下文相关语法
【发布时间】:2015-10-29 00:15:14
【问题描述】:

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

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)的内容后,我也完全迷失了如何解决这些问题。

谢谢。

【问题讨论】:

  • 一方面,它不可能是正确的,因为语言的描述谈到ijkl,而你的语法使用abcd

标签: programming-languages computer-science


【解决方案1】:

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

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

1. S → XY

添加规则生成1个ij和1个kl

2. iXj → ij
3. kYl → kl

添加生成多个“嵌套”集的规则:

4. X → iXj
5. Y → kYl

例如,iijjkkklll 的生成链是:

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

【讨论】:

  • 非常感谢您的解释。只是要清楚:所以,例如,如果我有 L={i^n j^n k^m l^m p^o q^o| m,n,o>=1} 比会有 1.S->XYZ 和 pZq?如果有 n
  • 在您指定的语言中,m,n,o 值是终端符号的重复次数。所以是的,S 开始规则将具有 Z 非终端符号,以允许您为 pq 终端符号提供规则。
  • 在你说n<=1<=m的第二部分中,这意味着可能有0或1次出现受n影响的终端符号,但必须有1次或多次出现受m 影响的终端符号。想想如何解决这个问题的S 起始规则。 (记住要符合上下文相关文法的定义,它定义了规则两边需要什么集合和符号序列。)
猜你喜欢
  • 2011-03-04
  • 1970-01-01
  • 2019-04-12
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
相关资源
最近更新 更多