From: Nathaniel Wesley Filardo Date: Fri, 14 Mar 2014 17:47:55 +0000 (-0400) Subject: Add a section on pushdown assemblers X-Git-Url: https://hydra-www.ietfng.org/gitweb/?a=commitdiff_plain;h=edca2b768e92b5aec4206ae31146985bf4c447a8;p=autzoo Add a section on pushdown assemblers --- diff --git a/biblio.bib b/biblio.bib index 6d2aaf0..586be00 100644 --- a/biblio.bib +++ b/biblio.bib @@ -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} +} diff --git a/main.tex b/main.tex index 65a1cd8..291ba1b 100644 --- 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 index 0000000..76f0bc3 --- /dev/null +++ b/zoo-str/pa.tex @@ -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.