【问题标题】:Using a PDA, show that ( x * y ) + x is a valid string使用 PDA,证明 ( x * y ) + x 是一个有效的字符串
【发布时间】:2019-11-28 04:24:12
【问题描述】:

如果你能帮助我并解释它是如何完成的,我在 C 部分遇到了麻烦。提前谢谢你!

【问题讨论】:

  • 请阅读How to Ask 并参考help center 了解您可以在此处询问的主题。
  • 我投票结束这个问题,因为它与编程无关。
  • IIRC,“PDA”在此上下文中表示 下推自动机
  • 我投票结束这个问题,因为它是一个 CS 理论问题,更适合 cs.stackexchange.com。
  • 奇怪的问题。要使用 PDA,您必须先定义一个,但不确定它如何显示任何内容。

标签: string math logic discrete-mathematics pushdown-automaton


【解决方案1】:

(a) 据我所知,他们只是要求重写语法:

<E> -> <E> + <T>
<E> -> <E> - <T>
<E> -> <T>
<T> -> <T> * <F>
<T> -> <T> / <F>
<T> -> <F>
<F> -> (<F>)
<F> -> x
<F> -> y

(b) 他们想要 (x * y) + x 的推导:

                          (             <T> -- <F> -- x
                         /             /
                        /             /
                       /             /
      <E> -- <T> -- <F> -- <E> -- <T> -- *
     /                 \             \
    /                   \             \
   /                     \             \
<E> -- +                  )             <F> -- y
   \
    \
     \
      <T> -- <F> -- x

(c) 我们可以定义一个 NPDA,它不确定地将所有有效的派生推入堆栈,然后弹出输入以接受。堆栈如下所示:

stack         input remaining
Z             (x * y) + x
<E>Z          (x * y) + x
<E>+<T>Z      (x * y) + x
<T>+<T>Z      (x * y) + x
<F>+<T>Z      (x * y) + x
(<E>)+<T>Z     x * y) + x
<E>)+<T>Z      x * y) + x
<T>)+<T>Z      x * y) + x
<T>*<F>)+<T>Z  x * y) + x
<F>*<F>)+<T>Z  x * y) + x
x*<F>)+<T>Z    x * y) + x
*<F>)+<T>Z       * y) + x
<F>)+<T>Z          y) + x
y)+<T>Z            y) + x
)+<T>Z              ) + x
+<T>Z                 + x
<T>Z                    x
<F>Z                    x
xZ                      x
Z                 (empty)

【讨论】:

    猜你喜欢
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 2019-07-31
    • 2016-06-07
    • 1970-01-01
    • 2018-04-26
    相关资源
    最近更新 更多