<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Simple_precedence_parser</id>
	<title>Simple precedence parser - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Simple_precedence_parser"/>
	<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Simple_precedence_parser&amp;action=history"/>
	<updated>2026-10-26T19:23:07Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Simple_precedence_parser&amp;diff=1453250&amp;oldid=prev</id>
		<title>imported&gt;AnomieBOT: Dating maintenance tags: {{Merge to}}</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Simple_precedence_parser&amp;diff=1453250&amp;oldid=prev"/>
		<updated>2025-05-29T21:54:16Z</updated>

		<summary type="html">&lt;p&gt;Dating maintenance tags: {{Merge to}}&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{multiple issues|&lt;br /&gt;
{{No footnotes|date=March 2023}}&lt;br /&gt;
{{Technical|date=May 2025}}&lt;br /&gt;
}}&lt;br /&gt;
{{Merge to|Simple precedence grammar|date=May 2025}}&lt;br /&gt;
&lt;br /&gt;
In [[computer science]], a &amp;#039;&amp;#039;&amp;#039;simple precedence parser&amp;#039;&amp;#039;&amp;#039; is a type of [[bottom-up parser]] for [[context-free grammars]] that can be used only by [[simple precedence grammar]]s.&lt;br /&gt;
&lt;br /&gt;
The implementation of the parser is quite similar to the generic [[bottom-up parser]]. A stack is used to store a [[viable prefix]] of a [[sentential form]] from a [[rightmost derivation]]. The symbols ⋖, ≐ and ⋗ are used to identify the &amp;#039;&amp;#039;&amp;#039;pivot&amp;#039;&amp;#039;&amp;#039;, and to know when to &amp;#039;&amp;#039;&amp;#039;Shift&amp;#039;&amp;#039;&amp;#039; or when to &amp;#039;&amp;#039;&amp;#039;Reduce&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
* Compute the [[Wirth–Weber precedence relationship]] table for a grammar with initial symbol S.&lt;br /&gt;
* Initialize a stack with the &amp;#039;&amp;#039;&amp;#039;starting marker&amp;#039;&amp;#039;&amp;#039; $.&lt;br /&gt;
* Append an &amp;#039;&amp;#039;&amp;#039;ending marker&amp;#039;&amp;#039;&amp;#039; $ to the string being parsed (&amp;#039;&amp;#039;&amp;#039;Input&amp;#039;&amp;#039;&amp;#039;).&lt;br /&gt;
* Until Stack equals &amp;quot;$ S&amp;quot; and Input equals &amp;quot;$&amp;quot;&lt;br /&gt;
** Search the table for the relationship between Top(stack) and NextToken(Input)&lt;br /&gt;
** if the relationship is ⋖ or ≐&lt;br /&gt;
*** &amp;#039;&amp;#039;&amp;#039;Shift&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
*** Push(Stack, relationship)&lt;br /&gt;
*** Push(Stack, NextToken(Input))&lt;br /&gt;
*** RemoveNextToken(Input)&lt;br /&gt;
** if the relationship is ⋗&lt;br /&gt;
*** &amp;#039;&amp;#039;&amp;#039;Reduce&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
*** SearchProductionToReduce(Stack)&lt;br /&gt;
*** Remove the Pivot from the Stack&lt;br /&gt;
*** Search the table for the relationship between the nonterminal from the production and first symbol in the stack (Starting from top)&lt;br /&gt;
*** Push(Stack, relationship)&lt;br /&gt;
*** Push(Stack, Non terminal)&lt;br /&gt;
&lt;br /&gt;
SearchProductionToReduce (Stack)&lt;br /&gt;
* Find the topmost ⋖ in the stack; this and all the symbols above it are the &amp;#039;&amp;#039;&amp;#039;Pivot&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* Find the production of the grammar which has the &amp;#039;&amp;#039;&amp;#039;Pivot&amp;#039;&amp;#039;&amp;#039; as its right side.&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&lt;br /&gt;
Given following language, which can parse arithmetic expressions with the multiplication and addition operations:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
E  --&amp;gt; E + T&amp;#039; | T&amp;#039;&lt;br /&gt;
T&amp;#039; --&amp;gt; T&lt;br /&gt;
T  --&amp;gt; T * F  | F&lt;br /&gt;
F  --&amp;gt; ( E&amp;#039; ) | num&lt;br /&gt;
E&amp;#039; --&amp;gt; E&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;num&amp;#039;&amp;#039;&amp;#039; is a terminal, and the [[lexer (computer science)|lexer]] parse any integer as &amp;#039;&amp;#039;&amp;#039;num&amp;#039;&amp;#039;&amp;#039;; &amp;#039;&amp;#039;&amp;#039;E&amp;#039;&amp;#039;&amp;#039; represents an arithmetic expression, &amp;#039;&amp;#039;&amp;#039;T&amp;#039;&amp;#039;&amp;#039; is a term and &amp;#039;&amp;#039;&amp;#039;F&amp;#039;&amp;#039;&amp;#039; is a factor.&lt;br /&gt;
&lt;br /&gt;
and the Parsing table:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!    | ||E|| E&amp;#039; || T ||  T&amp;#039; || F || + ||*||(||)||num || $&lt;br /&gt;
|-&lt;br /&gt;
! E &lt;br /&gt;
| || || || || ||≐|| || ||⋗ || ||&lt;br /&gt;
|-&lt;br /&gt;
! E&amp;#039;&lt;br /&gt;
| || ||  || || || || || ||≐|| ||&lt;br /&gt;
|-&lt;br /&gt;
! T &lt;br /&gt;
| || ||  || || ||⋗||≐|| ||⋗|| ||⋗&lt;br /&gt;
|-&lt;br /&gt;
! T&amp;#039;&lt;br /&gt;
| || ||  || || ||⋗|| || ||⋗|| ||⋗&lt;br /&gt;
|-&lt;br /&gt;
! F &lt;br /&gt;
| || ||  || || ||⋗||⋗|| ||⋗|| ||⋗&lt;br /&gt;
|-&lt;br /&gt;
! + &lt;br /&gt;
| || ||⋖||≐||⋖|| || ||⋖|| ||⋖ ||&lt;br /&gt;
|-&lt;br /&gt;
! * &lt;br /&gt;
| || ||  || ||≐|| || ||⋖|| ||⋖ ||&lt;br /&gt;
|-&lt;br /&gt;
! ( &lt;br /&gt;
|⋖||≐||⋖||⋖||⋖|| || ||⋖|| ||⋖ ||&lt;br /&gt;
|-&lt;br /&gt;
! ) &lt;br /&gt;
| || ||  || || ||⋗||⋗|| ||⋗|| ||⋗&lt;br /&gt;
|-&lt;br /&gt;
! num&lt;br /&gt;
| || ||  || || ||⋗||⋗||||⋗|| ||⋗&lt;br /&gt;
|-&lt;br /&gt;
! $ &lt;br /&gt;
|⋖|| ||⋖||⋖||⋖|| || ||⋖|| ||⋖ ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{aligned table|cols=4|row1header=Y|class=wikitable|style=font-family:monospace|col3align=right&lt;br /&gt;
| STACK                    | PRECEDENCE     | INPUT             | ACTION&lt;br /&gt;
&lt;br /&gt;
| $                             | ⋖         | 2 * ( 1 + 3 )$    | SHIFT&lt;br /&gt;
| $ ⋖ 2                         | ⋗         | * ( 1 + 3 )$      | REDUCE (F -&amp;gt; num)&lt;br /&gt;
| $ ⋖ F                         | ⋗         | * ( 1 + 3 )$      | REDUCE (T -&amp;gt; F)&lt;br /&gt;
| $ ⋖ T                         | ≐         | * ( 1 + 3 )$      | SHIFT&lt;br /&gt;
| $ ⋖ T ≐ *                     | ⋖         | ( 1 + 3 )$        | SHIFT&lt;br /&gt;
| $ ⋖ T ≐ * ⋖ (                 | ⋖         | 1 + 3 )$          | SHIFT&lt;br /&gt;
| $ ⋖ T ≐ * ⋖ ( ⋖ 1             | ⋗         | + 3 )$            | REDUCE 4× (F -&amp;gt; num) (T -&amp;gt; F) (T&amp;#039; -&amp;gt; T) (E -&amp;gt;T &amp;#039;) &lt;br /&gt;
| $ ⋖ T ≐ * ⋖ ( ⋖ E             | ≐         | + 3 )$            | SHIFT&lt;br /&gt;
| $ ⋖ T ≐ * ⋖ ( ⋖ E ≐ +         | ⋖         | 3 )$              | SHIFT&lt;br /&gt;
| $ ⋖ T ≐ * ⋖ ( ⋖ E ≐ + &amp;lt; 3     | ⋗         | )$                | REDUCE 3× (F -&amp;gt; num) (T -&amp;gt; F) (T&amp;#039; -&amp;gt; T) &lt;br /&gt;
| $ ⋖ T ≐ * ⋖ ( ⋖ E ≐ + ≐ T     | ⋗         | )$                | REDUCE 2× (E -&amp;gt; E + T) (E&amp;#039; -&amp;gt; E)&lt;br /&gt;
| $ ⋖ T ≐ * ⋖ ( ≐ E&amp;#039;            | ≐         | )$                | SHIFT&lt;br /&gt;
| $ ⋖ T ≐ * ⋖ ( ≐ E&amp;#039; ≐ )        | ⋗         | $                 | REDUCE (F -&amp;gt; ( E&amp;#039; ))&lt;br /&gt;
| $ ⋖ T ≐ * ≐ F                 | ⋗         | $                 | REDUCE (T -&amp;gt; T * F)&lt;br /&gt;
| $ ⋖ T                         | ⋗         | $                 | REDUCE 2× (T&amp;#039; -&amp;gt; T) (E -&amp;gt; T&amp;#039;)&lt;br /&gt;
| $ ⋖ E                         |         | $                 | ACCEPT&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
* Alfred V. Aho, Jeffrey D. Ullman (1977). &amp;#039;&amp;#039;[[Principles of Compiler Design]]&amp;#039;&amp;#039;. 1st Edition. Addison–Wesley.&lt;br /&gt;
* William A. Barrett, John D. Couch (1979). &amp;#039;&amp;#039;Compiler construction: Theory and Practice&amp;#039;&amp;#039;. Science Research Associate.&lt;br /&gt;
* Jean-Paul Tremblay, P. G. Sorenson (1985). &amp;#039;&amp;#039;The Theory and Practice of Compiler Writing&amp;#039;&amp;#039;. McGraw–Hill.&lt;br /&gt;
&lt;br /&gt;
{{Parsers}}&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Simple Precedence Parser}}&lt;br /&gt;
[[Category:Parsing algorithms]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{comp-sci-stub}}&lt;br /&gt;
{{Compu-lang-stub}}&lt;/div&gt;</summary>
		<author><name>imported&gt;AnomieBOT</name></author>
	</entry>
</feed>