]> hydra-www.ietfng.org Git - autzoo/commitdiff
Add a section on pushdown assemblers
authorNathaniel Wesley Filardo <nwf@cs.jhu.edu>
Fri, 14 Mar 2014 17:47:55 +0000 (13:47 -0400)
committerNathaniel Wesley Filardo <nwf@cs.jhu.edu>
Fri, 14 Mar 2014 17:47:55 +0000 (13:47 -0400)
biblio.bib
main.tex
zoo-str/pa.tex [new file with mode: 0644]

index 6d2aaf06a1d028e0ac62cfcde61a7d1ef8cacf8f..586be0089fdf184ca367ce00e8896ecce404cf8c 100644 (file)
@@ -152,3 +152,19 @@ mechanism. We combine the above constructions adequately to provide an algorithm
        date = {2008},
        keywords = {Algorithm Analysis and Problem Complexity, Computation by Abstract Devices, Discrete Mathematics in Computer Science, Mathematical Logic and Formal Languages, Symbolic and Algebraic Manipulation}
 }
+
+@article{aho:pa,
+       title = {Syntax directed translations and the pushdown assembler},
+       volume = {3},
+       issn = {0022-0000},
+       url = {http://www.sciencedirect.com/science/article/pii/S0022000069800061},
+       doi = {10.1016/S0022-0000(69)80006-1},
+       abstract = {It is shown that there exists an infinite hierarchy of syntax-directed translations according to the number of nonterminals allowed on the right side of productions of the underlying context-free grammar. A device called the pushdown assembler is defined, and it is shown capable of performing exactly the syntax-directed translations.},
+       pages = {37-56},
+       number = {1},
+       journaltitle = {Journal of Computer and System Sciences},
+       shortjournal = {Journal of Computer and System Sciences},
+       author = {Aho, A. V. and Ullman, J. D.},
+       urldate = {2014-03-06},
+       date = {1969-02}
+}
index 65a1cd8cd5692d2954d49deb0124cffe06537ff1..291ba1b128ca30dbb1ffd6e9dfa192b1577ad7a6 100644 (file)
--- a/main.tex
+++ b/main.tex
@@ -103,6 +103,9 @@ or \url{http://www.gnu.org/licenses/agpl-3.0.txt}) or any later version.}}
 \newcommand{\expect}[1]{\left\langle#1\right\rangle}
 \newcommand{\sem}[1]{\left\llbracket #1\right\rrbracket}
 
+\newcommand{\inl}[1]{\ensuremath{\mbox{inl}~#1}}
+\newcommand{\inr}[1]{\ensuremath{\mbox{inr}~#1}}
+
 \newcommand{\pset}[1]{\mathcal{P}\paren{#1}}
 
 \makeatletter
@@ -230,6 +233,7 @@ or \url{http://www.gnu.org/licenses/agpl-3.0.txt}) or any later version.}}
 \maininclude{Automata Overview}{strautintro}
 \maininclude{Finite-state Machine}{zoo-str/fsm}
 \maininclude{Push-down Automata}{zoo-str/pda}
+\maininclude{Push-down Assembler}{zoo-str/pa}
 \maininclude{Stack Automata}{zoo-str/stack}
 \maininclude{Nested Stack Automata}{zoo-str/nested-stack}
 \maininclude{Turing Machine}{zoo-str/tm}
diff --git a/zoo-str/pa.tex b/zoo-str/pa.tex
new file mode 100644 (file)
index 0000000..76f0bc3
--- /dev/null
@@ -0,0 +1,70 @@
+An extension of the non-deterministic PDA \autoref{sec:zoo-str/pda}
+introduced by \cite{aho:pa}, pushdown assemblers have a (non-empty) stack
+whose entries are a tuple of a symbol and $k$-many string registers.  A PA
+has four sets of symbols used during its computation: states
+($\mathcal{Q}$), input symbols ($\Sigma$), output symbols ($\Delta$), and
+stack (``tape'') symbols ($\Gamma$).  Let $\phi$ denote a symbol disjoint
+from all of these sets, and let $Q_0 \in \mathcal{Q}$ and $Z_0 \in \Gamma$
+be the initial state and stack symbol.
+
+For this family, the machine is described by a state and the contents of the
+stack, which is a string of stack symbols and per-slot registers: $\config =
+\mathcal{Q} \times \paren{1 + \Delta^*} \times \paren{ \Gamma \times
+\paren{\Delta^* + \phi}^k }^+$.  The initial $\config_0 = Q_0 \times \inl{1}
+\times \brak{Z_0 \times \phi^k}$.
+
+The transition function is characterized by the union of three functions,
+all of which are given the same visibility into $\config$, namely the state,
+optionally the next input symbol, and the top of the stack.  These functions
+are
+%
+\begin{itemize}
+%
+       \item[$\lambda$] of type $\mathcal{Q} \times \paren{\Sigma + 1} \times
+       \Gamma \to \mathcal{P}\brak{ \mathcal{Q} \times \Gamma^* }$
+%
+       \item[$\mu$] of type $\mathcal{Q} \times \paren{\Sigma + 1} \times
+       \Gamma \to \mathcal{P}\brak{ \mathcal{Q} \times \Delta^* \times
+       \set{1,\ldots,k} }$
+%
+       \item[$\nu$] of type $\mathcal{Q} \times \paren{\Sigma + 1} \times
+       \Gamma \to \mathcal{P}\brak{ \mathcal{Q} \set{1,\ldots,k} }$
+%
+\end{itemize}
+%
+These functions collectively define the transitions between configurations
+$c = q \times w \times \paren{Z\brak{x_1,\ldots,x_k}}\alpha$ and $c' \in
+\delta\paren{c \times a}$ (where $q \in \mathcal{Q}$ is the state of the
+machine, $w \in 1 + \Delta^*$, $Z\brak{x_1,\ldots,x_k}$ with $Z \in \Gamma$
+and $x_i \in \Delta^* + \phi$ is the head of the stack, $\alpha$ the
+remainder, and $a \in \Sigma + 1$ the next input symbol or the empty string)
+is as follows (see \cite[p.  48]{aho:pa}):
+%
+\begin{align*}
+       % \lambda non-\epsilon output
+       q'\times \inl{1} \times \paren{K_1\brak{\phi^k} \ldots K_n\brak{\phi^k} \alpha} \in\delta (c \times a)
+%
+       &\Leftarrow q' \times \paren{K_1 \ldots K_n} \in \lambda\paren{q,a, Z} \wedge w = \inl{1} \wedge n \ge 1 \\
+%
+       % \lambda \epsilon output
+       q'\times \inr{\paren{x_1 \ldots x_k}} \times \alpha \in \delta (c \times a)
+%
+       &\Leftarrow q' \times \epsilon \in \lambda\paren{q,a, Z} \wedge w = \inl{1} \\
+%
+       % \nu
+       q'\times \inl{1} \times \paren{Z\brak{x_1,\ldots,x_{i-1},x,x_{i+1},\ldots,x_k}\alpha} \in\delta (c \times a)
+%
+       &\Leftarrow q' \times i \in \nu\paren{q,a, Z} \wedge w = \inr{w'} \wedge x_i = \phi \\
+%
+       % \mu
+       q'\times \inl{1} \times \paren{Z\brak{x_1,\ldots,x_{i-1},y,x_{i+1},\ldots,x_k}\alpha} \in\delta (c \times a)
+%
+       &\Leftarrow q' \times y \times i \in \mu\paren{q,a, Z} \wedge w = \inl{1} \wedge x_i = \phi
+%
+\end{align*}
+%
+That is, $\lambda$ serves two roles: to push new $\Gamma$ to the stack or to
+concatinate registers into a distinguished placeholder.  $\nu$ serves to
+consume that placeholder, placing it into a top-of-stack register (all other
+rules are blocked if the placeholder is nonempty).  $\mu$ allows insertion
+of strings into top-of-stack registers.