<?xml version="1.0"?><!DOCTYPE article SYSTEM "/project/take/software/searchbench_offline_processing/paperxml_generator/aclextractor/src/python/../resource/dtd/paperxml.dtd"><article><header><firstpageheader><page local="1" global="305"/><title>A New Parallel Algorithm for Generalized LR Parsing</title><author surname="NUMAZAKI" givenname="Hiroaki"><org  name="Tokyo Institute of Technology" country="Japan" city="Tokyo"/></author><author surname="TANAKA" givenname="Hozumi"><org  name="Tokyo Institute of Technology" country="Japan" city="Tokyo"/></author></firstpageheader><frontmatter><p>A New Parallel Algorithm for Generalized LR Parsing</p><p>Hiroaki NUMAZAKI Hozumi TANAKA</p><p>Department of Computer Science Tokyo Institute of Technology 2-12-1 Oookayama Meguro-ku Tokyo 152, Japan</p></frontmatter><abstract>Tomita's parsing algorithm [Tomita 86], which adapted the LR parsing al­gorithm to context free grammars, makes use of a breadth-first strategy to handle LR table conflicts. As the breadth-first strategy is com­patible with parallel processing, we can easily develop a parallel generalized LR parser based on Tomita's algorithm [Tanaka 89]. However, there is a problem in that this algorithm syn­chronizes parsing processes on each shift ac­tion for the same input word to merge many stacks into Graph Structured Stacks (GSS). In other words, a process that has completed a shift action must wait until all other processes have ended theirs — a strategy that reduces parallel performance. We have developed a new parallel parsing algorithm that does not need to wait for shift actions before merging many stacks, using stream communication of a concurrent logic programming language called GIIC [Ueda 85]. Thus we obtain a parallel generalized LR parser implemented in GIIC. </abstract></header><body><section number="1" title="Introduction"><p>To provide an efficient parser for natural lan­guage sentences, a parallel parsing algorithm is desirable. As Tomita's algorithm is com­patible with parallel processing, we can eas­ily develop a parallel generalized LR parser [Tanaka 89]. However, with respect to the per­formance of the parallel parsing, one of the defects of Tomita's algorithm is that it forces many parsing processes to synchronize on each shift action for the same input word. A pars­ing process that has completed a shift action must wait until all other processes have com­pleted their shift actions as well; such a synchronization strategy reduces the performance of parallel parsing.</p><p>In this paper, we will present a new parallel parsing algorithm which is a natural extension of Tomita's [Tomita 86]. Our algorithm can achieve greater performance in parallel pars­ing for natural language sentences.</p><p>There are two major differences between Tomita's algorithm and ours. Initially, the new algorithm does not make parsing pro­cesses wait for shift actions to merge many stacks with the same top state. The process that has finished a 'shift N' action first can proceed to the next actions until a reduce ac­tion needs to pop the element 'N' from the stack. If some other parsing processes carry out the same 'shift N' actions, their stacks will be merged into the position in which the first process has placed an element by the 'shift N' action.</p><p>Secondly, to avoid duplications of parsing processes the new algorithm employs Tree Structured Stacks (TSS) instead of Graph Structured Stacks (GSS). The reason why we do not use GSS is because it is rather compli­cated to implement the GSS data structure in the framework of a parallel logic programming language such as GHC. The merge operation of the stacks is realized by a GIIC stream com­munication mechanism.</p><p>In section 2 we explain generalized LR pars­ing, in section 3 give a brief introduction to GHC, and in section 4 decribe our new parallel generalized LR parsing algotihm. In section 5 we compare the parallel parsing performance of our algorithm with Tomita's.</p><doubt alpha="0.0" length="1" tooSmall="False" monospace="0.0">1</doubt><page local="2" global="306"/></section><section number="2" title="Generalized LR Parsing Al­gorithm"><p>The execution of the generalized LR algorithm is controlled by an LR parsing table generated from predetermined grammar rules. Figure 1 shows an ambiguous English grammar struc­ture, and Figure 2 an LR parsing table gener­ated from Figure 1.</p><p>Action table entries are determined by a parser's state (the row of the table) and a look-ahead preterminal (the column of the ta­ble) of an input sentence. There are two kinds of stack operations: shift and reduce opera­tions. Some entries in the LR table contain more than two operations and are thus in con­flict. In such cases, a parser must conduct more than two operations simultaneously.</p><p>The symbol 'sh N' in some entries indicates that the generalized LR parser has to push a look-ahead preterminal on the LR stack and go to 'state N'. The symbol 're N' means that the generalized LR parser has to reduce from the top of the stack the number of elements equivalent to that of the right-hand side of the rule numbered 'N'. The symbol 'acc' means that the generalized LR parser has success­fully completed parsing. If an entry contains no operation, the generalized LR parser will detect an error.</p><p>The right-hand table entry indicates which state the parser should enter after a reduce op­eration. The LR table shown in Figure 2 has two conflicts at state 11 (row no. 11) and state</p><doubt alpha="20.0" length="5" tooSmall="False" monospace="0.0">(1) S</doubt><doubt alpha="20.0" length="5" tooSmall="False" monospace="0.0">(2) S</doubt><doubt alpha="33.3" length="6" tooSmall="False" monospace="0.0">(3) NP</doubt><doubt alpha="33.3" length="6" tooSmall="False" monospace="0.0">(4) NP</doubt><doubt alpha="33.3" length="6" tooSmall="False" monospace="0.0">(5) NP</doubt><doubt alpha="33.3" length="6" tooSmall="False" monospace="0.0">(6) VP</doubt><doubt alpha="33.3" length="6" tooSmall="False" monospace="0.0">(7) PP</doubt><p>NP, VP. S, PP. NP, PP. det, noun, pron. v, NP. p, NP.</p><p>Fig.l: An Ambiguous English Grammar 12 for the 'p' column. Each of the conflicting two entries contains a shift and a reduce opera­tion and is called a shift-reduce conflict. When a parser encounters a conflict, it cannot deter­mine which operation should be carried out first. In our parser, conflicts will be resolved using a parallel processing technique such that the order of the operations in conflict is of no concern.</p></section><section number="3" title="Brief Introduction to GHC"><p>Before explaining the details of our algorithm, we will give a brief introduction to GHC, typ­ical statements of which are given in Figure 3. Roughly speaking, the vertical bar in a GHC statement (Fig.3) functions as a cut symbol of Prolog. When goal 'a' is executed, a process of statement (1) is activated and the body be­comes a new goal in which 'b(Stream)' and 'c(Stream)' are executed simultaneously. In GHC, this is called AND-parallel execution. In other words, subprocesses 'b(Stream)' and</p><doubt alpha="0.0" length="1" tooSmall="False" monospace="0.0">2</doubt><p>Fig.2: A LR Parsing Table obtained from Fig.l Grammar 'c (Stream)' are created by a parent process 'a' and they run in parallel.<page local="3" global="307"/> Note that the definition of process 'c' in statement (3) is going to instantiate the variable 'Stream' in 'c(Stream)' with '[A | Streaml]'. In such a case the execution of process 'c' will be sus­pended until 'Stream' has been instantiated by process 'b(Stream)'. By the recursive process call in the body of definition (2), process 'b' continues to produce the atom 'x' and places it on stream. The atom 'x' is sent to process V by the GHC stream communication; process V,' continues to consume atom 'x' on stream.</p><table class="main" frame="box" rules="all" border="0" regular="False"><tr class="row"><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"><p></p></td><td class="cell"><p>det</p></td><td class="cell"><p>noun pron</p></td><td class="cell"><p><b>V</b></p></td><td class="cell"><p>P</p></td><td class="cell"><p>$</p></td><td class="cell"><p>NP</p></td><td class="cell"><p>PP</p></td><td class="cell"><p>VP S</p></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"><p>0</p></td><td class="cell"><p>shl</p></td><td class="cell"><p>sh2</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p>4</p></td><td class="cell"><p></p></td><td class="cell"><p>3</p></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"><p>1</p></td><td class="cell"><p></p></td><td class="cell"><p>sh5</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"><p>2</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p>re5</p></td><td class="cell"><p>re5</p></td><td class="cell"><p>re 5</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"><p>3</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p>sh6</p></td><td class="cell"><p>acc</p></td><td class="cell"><p></p></td><td class="cell"><p>7</p></td><td class="cell"><p></p></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"><p>4</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p>sh8</p></td><td class="cell"><p>sh6</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p>10</p></td><td class="cell"><p>9</p></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"><p>5</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p>re4</p></td><td class="cell"><p>re4</p></td><td class="cell"><p>re4</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"><p>6</p></td><td class="cell"><p>shl</p></td><td class="cell"><p>sh2</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p>11</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"><p>7</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p>re2</p></td><td class="cell"><p>re2</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"><p>8</p></td><td class="cell"><p>shl</p></td><td class="cell"><p>sh2</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p>12</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"><p>9</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p>rel</p></td><td class="cell"><p>rel</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"><p>10</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p>re3</p></td><td class="cell"><p>re3</p></td><td class="cell"><p>re3</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"><p>11</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p>re7</p></td><td class="cell"><p>sh6/re7</p></td><td class="cell"><p>re7</p></td><td class="cell"><p></p></td><td class="cell"><p>10</p></td><td class="cell"><p></p></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"><p>12</p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p></p></td><td class="cell"><p>sh6/re6</p></td><td class="cell"><p>re6</p></td><td class="cell"><p></p></td><td class="cell"><p>10</p></td><td class="cell"><p></p></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td></tr></table><doubt alpha="0.0" length="1" tooSmall="False" monospace="0.0">3</doubt><doubt alpha="35.7" length="14" tooSmall="False" monospace="0.0">(1) a:- true |</doubt><p><b>b(Stream), c(Stream).</b></p><doubt alpha="50.0" length="22" tooSmall="False" monospace="0.0">(2) b(Stream):- true |</doubt><p><b>Stream=[ </b>x<b>I </b><b>Rest ], b(Rest).</b></p><doubt alpha="53.6" length="28" tooSmall="False" monospace="0.0">(3) c([ AIStreaml ]):- trueI</doubt><p><b>c(Streaml).</b></p><p>Fig.3: Typical Statement of GHC</p></section><section number="4" title="New Parallel Generalized LR Parsing Algorithm"><p>The new parallel parsing algorithm is a natural extension of Tomita's algorithm [Tomita 86] and enables us to achieve greater parallel performance. In our algorithm, if a parsing sentence contains syntactic ambigui­ties, two or more parsing processes will run in parallel.</p><subsection number="4.1" title="Tree Structured Stacks"><p>To avoid the duplication of parsing processes, the new algorithm makes use of Tree Structured Stacks (TSS) instead of Tomita's Graph Structured Stacks (GSS). An example of TSS is given in the form of a list data structure in GHC. Consider the following generalized LR parsing, using for the input sentence, the grammar and the table in Figure 1 and Figure 2 respectively. After the parser has shifted the word 'with', the following two stacks with the same top state '6' will be obtained:</p><p><b>Sentence :</b></p><doubt alpha="64.5" length="31" tooSmall="False" monospace="0.0">" Iopen the door with a key . "</doubt><doubt alpha="15.8" length="19" tooSmall="False" monospace="0.0">(1) top &lt; [ 3,8,0 ]</doubt><doubt alpha="32.3" length="31" tooSmall="False" monospace="0.0">(2)top&lt; C6,p,12,np,8,v,4,np,0 ]</doubt><p>Fig.4: Two Stacks to be Merged</p><p>We will merge these two stacks and get the following TSS:</p><doubt alpha="19.4" length="31" tooSmall="False" monospace="0.0">(3) [ 6,p,  [12,np,8,v,4,np,0],</doubt><doubt alpha="22.2" length="9" tooSmall="False" monospace="0.0">C3.S.0] ]</doubt><figure caption="Figure 5 shows an image of the TSS above."></figure></subsection><subsection number="4.2" title="Stack Operations on Stream"><p>In order to merge the stacks, Tomita's algo­rithm must synchronize the parsing processes for shift operations, thereby reducing paral­lel performance. To solve this problem, we have developed an improved parallel general­ized LR algorithm that involves no waiting for shift operations before merging many stacks. The new algorithm is made possible by a GHC stream communication mechanism.</p><p>Through this stream communication mech­anism, a process that has completed a 'shift N' fust has the privilege of proceeding to sub­sequent actions and continuing to do so until a reduce action pops an element with state 'N' into the stack.<page local="4" global="308"/> If other parsing processes carry out the same 'shift N' actions, their stacks will be merged into the position in which the "priv­ileged" process had, by the 'shift N' action, inserted an element. The merging of stacks is thus greatly facilitated by the GHC stream communication mechanism.</p><doubt alpha="0.0" length="1" tooSmall="False" monospace="0.0">4</doubt><p>To begin parsing, we will create a sequence of goal processes, namely <b>pi,p2,... ,pn,p$, </b>each of which corresponds to a look-ahead preterminal of an input sentence (referred to hereafter as a parent process). The stack in­formation is sent from process pi to process p$ using the GHC communication mechanism. Each parsing process receives the TSS from its input stream, changes the TSS in parallel ac­cording to the LR table entry, and sends the results as the output stream — which in turn becomes the input stream of the adjacent pro­cess. The stream structure is as follows:</p><p><b>[ Stackl,Stack2,...,Stackn </b><b>I </b><b>Stream ]</b></p><p>where <b>Stacki </b>is a TSS like (3) or a simple stack like (1).</p><p>Consider the case where a shift-reduce con­flict occurs and the parent process produces two subprocesses which create stacks (1) and (2) (Fig.4). In order to merge both stacks, Tomita's parser forces the parent process to wait until the two subprocesses have returned the stacks (1) and (2). Our algorithm at­tempts to avoid such synchronization: even though only one subprocess has returned stack (2), the parent process does not wait for stack (1), but generates the following stack struc­ture and sends it on to the output stream (which in turn becomes the input stream of the adjacent process). The adjacent process can then perform its own operations for the top of stack (2) on the input stream. Thus the new algorithm achieves greater parallel perfor­mance than its predecessor. Output Stream of Parent Process :</p><doubt alpha="61.9" length="21" tooSmall="False" monospace="0.0">[ [6,pITail]IStream ]</doubt><p>where '6,p' are the top two elements of the stack (2).</p><p>Note that 'Tail' and 'Stream' remain unde­fined until the other subprocess returns stack (1). If the adjacent process wants to retrieve 'Tail' and 'Stream' after processing the top of stack (2), the process will be suspended until 'Tail' and 'Stream' have been instantiated by the rest of stacks (2) and (1).</p><p>This kind of synchronization is supported by GHC. Let's suppose the adjacent process re­ceives the above output stream from the par­ent process. Before the parent process has generated stack (1), the adjacent process can execute 5 steps for the top two elements of stack (2) ( see Figure 6 ). During the execu­tion of the adjacent process, the parent pro­cess will be able to run in parallel.</p><p>As soon as the parent process receives stack (2) , it instantiates the variables 'Tail' and 'Stream' and merges '6,p', getting the same TSS shown in Figure 5:</p><doubt alpha="66.7" length="45" tooSmall="False" monospace="0.0">(1) with the same top elements '6,p' of stack</doubt><doubt alpha="32.1" length="28" tooSmall="False" monospace="0.0">Tail= [ [ 12,np,8,v,4,np,0],</doubt><doubt alpha="30.4" length="23" tooSmall="False" monospace="0.0">[ 3,s,0 ] ]Stream = [ ]</doubt><p>We need to consider the case where the top element of stack (1) is different from that of stack (2). For example, suppose that stack (1)</p><p>Fig.6 The Parsing Process with an Incomplete Stack is [ <b>8^,3</b><b>,8</b><b>,0 </b>], then the variables <b>'Tail' </b>and <b>'Stream' </b>will be instantiated as follows:<page local="5" global="309"/></p><table class="main" frame="box" rules="all" border="1" regular="False"><tr class="row"><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"><p><b>State</b></p></td><td class="cell"><p><b>Symbol</b></p></td><td class="cell"><p><b>Action</b></p></td><td class="cell"><p><b>Stream</b></p></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"><p><b>6</b></p></td><td class="cell"><p><b>det</b></p></td><td class="cell"><p><b>sh </b><b>1</b></p></td><td class="cell"><p><b>C </b><b>[ l,det,6,p </b>1 <b>Tail ] | Stream ]</b></p></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"><p><b>1</b></p></td><td class="cell"><p><b>noun</b></p></td><td class="cell"><p><b>sh </b><b>5</b></p></td><td class="cell"><p><b>[ C </b><b>5,noun,1,det,6,p | Tail ]  | Stream ]</b></p></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"><p><b>5</b></p></td><td class="cell"><p><b>$</b></p></td><td class="cell"><p><b>re 4</b></p></td><td class="cell"><p><b>[ [ 6,p </b>1 <b>Tail ] </b>1 <b>Stream ]</b></p></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"><p><b>6</b></p></td><td class="cell"><p><b>np</b></p></td><td class="cell"><p><b>goto 11</b></p></td><td class="cell"><p><b>[ [ ll,np,6,p </b>1 <b>Tail ]  | Stream ]</b></p></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"><p><b>10</b></p></td><td class="cell"><p><b>$</b></p></td><td class="cell"><p><b>re 7</b></p></td><td class="cell"><p><b>[ Tail </b>1 <b>Stream ]</b></p></td><td class="cell"></td></tr><tr class="row"><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td><td class="cell"></td></tr></table><doubt alpha="0.0" length="1" tooSmall="False" monospace="0.0">5</doubt><doubt alpha="32.1" length="56" tooSmall="False" monospace="0.0">Tail     ~ [ 12,np,8,v,4,np,0 ] Stream =C[ 8,p,3,s,0 ] ]</doubt><p>In this case, we have two simple stacks in the stream.</p></subsection></section><section number="5" title="Comparison of Parallel Pars­ing Performance"><p>In this section, we will show by way of a simple example that our algorithm has greater paral­lel parsing performance than Tomita's origi­nal algorithm. Consider the parallel parsing of the input sentence " I open the door with a key ", using a grammar in Figure 1 and a table in Figure 2. As the input sentence has two syntactic ambiguities, the parsing process encounters a shift-reduce conflict of the LR ta­ble and is broken down into two subprocesses. Figure 7 shows the state of the parsing process and grammatical symbols which are put into a stack. When the process has the state 12 and the look-ahead preterminal 'p', the pro­cess encounters a 'sh 6/re 6' conflict. Then it is broken down into two subprocesses: the first process performs the 'sh 6' operation and goes to state 6, and the other performs the 're 6' operation. The second process also goes to the state 6 after performing 'goto 9','re 1','goto 3', and 'sh 6' operations. The processes that run according to the simple parallel LR parsing algorithm are shown in Figure 7(a).</p><p>We can see that the two processes perform the same operations after performing the 'sh 6' operations. If we do not merge these kinds of processes, we will face an explosion in the number of processes. Tomita's algorithm ( shown in Figure 7(b) ) can avoid the duplica­tion of parsing processes by merging them into one process. However, the algorithm needs a synchronization that decreases the number of processes which are able to run in parallel. On the other hand, our algorithm ( shown in Figure 7(c) ) does not require such synchro­nization as long as these processes do not try to reduce the incomplete part of a stack. In this example, two processes run in parallel af­ter a 'sh 6/re 6' conflict has occurred. Then, an incomplete stack like <b>[6 </b><b>,p I </b><b>Tail] </b>is cre­ated, with the upper process in Figure 7(c)</p><p>Shift Action (^) Reduce &amp; Goto Action</p><doubt alpha="64.7" length="51" tooSmall="False" monospace="0.0">wron NP    v det^oimtipp ^det^ou^ NP^PP^NP^VlVs S „</doubt><p><b>Fig.7(b): A Parallel Parsing Guided by Tomita's Algorithm</b> <b>Fig.</b><b>7(c): Our Parallel Parsing</b><page local="6" global="310"/></p><doubt alpha="0.0" length="1" tooSmall="False" monospace="0.0">6</doubt><p>performing the 'sh 1', 'sh 5', and 're 4' stack operations while the lower process calculates its incomplete part. After finishing the 'sh 6' operation of the lower process, the incomplete part <b>'Tail' </b>will be instantiated and thus we obtain the following tree structured stack:</p><doubt alpha="22.2" length="36" tooSmall="False" monospace="0.0">C6,p,  [12,np,8,v,4,np,0 ],C3,8,0 ]3</doubt><p>It is remarkable that our algorithm takes less time to than either the simple algorithm or Tomita's to generate the first result of parsing. The reason is that our algorithm can analyze two or more positions of an input sentence in parallel, which is a merit when parsing with incomplete stacks.</p><p>The complexity of our algorithm is identical to that of Tomita's [Johnson 89]. The only difference between the two is the number of processes that run in parallel. So if we sim­ulate the parsing of our algorithm and that of Tomita's on a single processor, the time of parsing will be exactly the same.</p></section><section number="6" title="Conclusion"><p>We have described a new parallel general­ized LR parsing algorithm which enables us to achieve greater performance of parallel pars­ing than Tomita's algorithm. Simulations in­dicate that most processes run in parallel and that the number of suspended processes is very small, but the experiment must be carried out using many processors. Fortunately, ICOT (headquarters of the Japanese fifth generation project) has offered us the possibility of using the Multi-PSI machine composed of 64 proces­sors. We are now preparing to conduct such an experiment to put our new parsing algorithm to the test.</p></section><references><p>[Aho 72] Aho,A.V.and Ulman,J.D.: <i>The The­ory of Parsing,Translation,and Compiling, </i>Prentice-Hall,Englewood Cliffs,New Jersey (1972)</p><p>[Knuth 65] Knuth,D.E.: <i>On the translation of languages from left to </i>ri#/i£,Information and Control 8:6,pp.607-639</p><p>[Johnson 89] Mark Johnson : <i>The Computa­tional Complexity of Tomita's Algorithm </i>In­ternational Workshop on Parsing Technolo­gies, pp.203-208 (1989) <i>Parallel Parsing System for Natural Lan­guage Analysis, </i>New Generation Comput­ing, Vol.5, No. 1, pp.63-78 (1987)</p><doubt alpha="66.7" length="30" tooSmall="False" monospace="0.0">[Matsumoto 87] Matsumoto,Y.:.A</doubt><p>[Matsumoto 89] Matsumoto,Y.: <i>Natural Lan­guage Parsing Systems based on Logic Pro­gramming, </i>Ph.D thesis of Kyoto University, (June 1989)</p><p>[Mellish 85] Mellish,C.S.: <i>Computer Interpre­tation of Natural Language Descriptions, </i>Ellis Horwood Limited (1985)</p><p>[Nilsson 86] Nilsson,U.: <i>AID:An Alternative Implementation of DCGs, </i>New Generation Computing, 4, pp.383-399 (1986)</p><p>[Tanaka 89] Tanaka,H. and Numazaki,H. <i>-.Parallel Generalized LR Parsing based on Logic Programming </i>International Workshop on Parsing Technologies, pp. 329-338 (1989)</p><p>[Pereira 80] Pereira,F.and War­ren,D.: Definite Clause Grammar for Lan­guage Analysis-A Survey of the Formalism and a Comparison with Augmented Tran­sition Networks, <i>Artif. Intell, </i>Vol.13, No.3, pp.231-278 (1980)</p><p>[Tanaka 89] Tanaka,H. Numazaki,H.:<i>Parallel Generalized LR Parser (PGLR) based on Logic Programming, </i>Proc. of First Australia-Japan joint Symposium on Natu­ral Language Processing, pp. 201-211 (1989)</p><p>[Tomita 86] Tomita,<i>M..: Efficient Parsing for Natural Language, </i>Kluwer Academic Pub­lishers (1986)</p><p>[Tomita 87] Tomita.M.: <i>An Efficien Augmented-Context-Free Pars­ing Algorithm, </i>Computational Linguistics, Vol.13, Numbers 1-2, pp.31-46 (1987)</p><p>[Ueda 85] Ueda,K.<i>-.Guarded Horn Clauses, </i>Proc. The Logic Programming Conference, Lecture Notes in Computer Science, 221 (1985)</p></references></body></article>