【问题标题】:construction of a^(2^i) language grammara^(2^i) 语言语法的构造
【发布时间】:2014-05-29 09:50:47
【问题描述】:

我有点被自动机和语法问题困扰。我搜索了很多,但没有任何成功。

是否有可能构造一个生成这种语言 L 的语法?

 L = { a<sup>(2<sup>i</sup>)</sup> | i &gt;= 0} 

谁能给我一个简单的解决方案?

【问题讨论】:

    标签: grammar context-free-grammar exponential automaton context-free-language


    【解决方案1】:

    当然可以为这种语言编写一个语法,但它不会是一个上下文无关的语法。使用pumping lemma 很容易演示。

    抽水引理指出,对于任何 CFL,都有一些整数 p 使得长度至少为 p 的语言中的任何字符串 s 都可以写成 uvxyz,其中 uvxyz 是字符串,vy 不为空,对于所有整数 n,字符串 uv<sup>n</sup>xy<sup>n</sup>z 也是该语言。

    也就是说,对于语言中的任何字符串(其长度l 大于p),存在一些k 使得语言中存在长度为l + nk 的任何整数的字符串na<sup>2<sup>i</sup></sup> 语言不是这种情况,因为这些字符串具有指数长度,因此该语言不能是上下文无关的。

    为该语言构建一个非上下文无关的语法并不难,但我不知道它有多大用处。

    以下是 0 类语法(即它也不是上下文相关的),但这只是因为用于摆脱元字符的产生式。这里的基本思想是我们在字符串周围放置开始和结束标记([]),并且我们有一个“复制器”(&rarrtl; kbd>) 从左到右移动使 a 加倍;当它到达结束标记时,它要么变成一个返回穿梭(&larrtl;),要么它吃掉结束标记并变成一个开始标记销毁器(&Larr; kbd>)

    <kbd>Start</kbd>: <kbd>[</kbd><kbd>&amp;rarrtl;</kbd><kbd>a</kbd><kbd>]</kbd>
    <kbd>&amp;rarrtl;</kbd><kbd>a</kbd>: <kbd>a</kbd><kbd>a</kbd><kbd>&amp;rarrtl;</kbd>
    <kbd>&amp;rarrtl;</kbd><kbd>]</kbd>: <kbd>&amp;larrtl;</kbd><kbd>]</kbd>
    <kbd>&amp;rarrtl;</kbd><kbd>]</kbd>: <kbd>&amp;Larr;</kbd>
    <kbd>a</kbd><kbd>&amp;larrtl;</kbd>: <kbd>&amp;larrtl;</kbd><kbd>a</kbd>
    <kbd>a</kbd><kbd>&amp;Larr;</kbd>: <kbd>&amp;Larr;</kbd><kbd>a</kbd>
    <kbd>[</kbd><kbd>&amp;larrtl;</kbd>: <kbd>[</kbd><kbd>&amp;rarrtl;</kbd>
    <kbd>[</kbd><kbd>&amp;Larr;</kbd>:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      • 2022-06-30
      • 2020-09-14
      • 1970-01-01
      相关资源
      最近更新 更多