> Yes, there is a lot of information in the .output file we could use;
 > but this is intended for a human reader;

This file is really obsolete, even for the human.  It should be an XML
file, with XSLT transformations towards HTML and text.


hi,
I have attempted to design a very simple XML format for the .output
file generated by Bison.  It might not be exhaustive but at least
might serve as a starting point for further discussion. The grammar is
a basic one taken from Nigel P. Chapman's book LR parsing Theory and
Practice.

I am attaching the Bison .output file and the XML file here.

Thanks,
./satya
<?xml version="1.0" ?>
<report>
 	<grammar>
	<rule>
		<ruleno>0</ruleno>
		<lhs>$accept</lhs>
		<rhs>L</rhs>
		<rhs>$end</rhs>
	</rule>
    	<rule>
    		<ruleno>1</ruleno>
		<lhs>L</lhs>
		<rhs>L</rhs>
		<rhs>';'</rhs>
		<rhs>E</rhs>
    	</rule>
    	<rule>
    		<ruleno>2</ruleno>
		<lhs>L</lhs>
		<rhs>E</rhs>
    	</rule>
    <rule>
    		<ruleno>3</ruleno>
		<lhs>E</lhs>
		<rhs>E</rhs>
		<rhs>','</rhs>
		<rhs>P</rhs>
    </rule>
    <rule>
    		<ruleno>4</ruleno>
		<lhs>E</lhs>
		<rhs>P</rhs>
    	</rule>
    <rule>
    	<ruleno>5</ruleno>
		<lhs>P</lhs>
		<rhs>'a'</rhs>
    </rule>
    <rule>
    		<ruleno>6</ruleno>
		<lhs>P</lhs>
		<rhs>'('</rhs>
		<rhs>M</rhs>
		<rhs>')'</rhs>
    </rule>
    <rule>
    		<ruleno>7</ruleno>
		<lhs>M</lhs>
		<!--no rhs -->
    </rule>
    <rule>
    		<ruleno>8</ruleno>
		<lhs>M</lhs>
		<rhs>L</rhs>
    </rule>
  </grammar>
  
  <!--terminals and nonterminals with rules where they appear -->
  <symbols>
		<terminal>
			<text>$end</text>
			<symbolno>0</symbolno>
			<rules>
				<ruleno>0</ruleno>
			</rules>
		</terminal>
		<terminal>
			<text>error</text>
			<symbolno>1</symbolno>
			<rules>
			</rules>
		</terminal>
		<terminal>
			<text>$undefined</text>
			<symbolno>2</symbolno>
			<rules>
			</rules>
		</terminal>
		<terminal>
			<text>NUM</text>
			<symbolno>3</symbolno>
			<rules>
			</rules>
		</terminal>
		<terminal>
			<text>';'</text>
			<symbolno>4</symbolno>
			<rules>
				<ruleno>1</ruleno>
			</rules>
		</terminal>
		<terminal>
			<text>','</text>
			<symbolno>5</symbolno>
			<rules>
				<ruleno>3</ruleno>
			</rules>
		</terminal>
		<terminal>
			<text>'a'</text>
			<symbolno>6</symbolno>
			<rules>
				<ruleno>5</ruleno>
			</rules>
		</terminal>
		<terminal>
			<text>'('</text>
			<symbolno>7</symbolno>
			<rules>
				<ruleno>6</ruleno>
			</rules>
		</terminal>
		<terminal>
			<text>')'</text>
			<symbolno>8</symbolno>
			<rules>
				<ruleno>6</ruleno>
			</rules>
		</terminal>
		<nonterminal>
			<text>$accept</text>
			<symbolno>9</symbolno>
			<rules>
				<left>
					<ruleno>0</ruleno>
				</left>
				<right>
				</right>
			</rules>
		</nonterminal>
		<nonterminal>
			<text>L</text>
			<symbolno>10</symbolno>
			<rules>
				<left>
					<ruleno>1</ruleno>
					<ruleno>2</ruleno>
				</left>
				<right>
					<ruleno>0</ruleno>
					<ruleno>1</ruleno>
					<ruleno>8</ruleno>
				</right>
			</rules>
		</nonterminal>
		<nonterminal>
			<text>E</text>
			<symbolno>11</symbolno>
			<rules>
				<left>
					<ruleno>3</ruleno>
					<ruleno>4</ruleno>
				</left>
				<right>
					<ruleno>1</ruleno>
					<ruleno>2</ruleno>
					<ruleno>3</ruleno>
				</right>
			</rules>
		</nonterminal>
		<nonterminal>
			<text>P</text>
			<symbolno>12</symbolno>
			<rules>
				<left>
					<ruleno>5</ruleno>
					<ruleno>6</ruleno>
				</left>
				<right>
					<ruleno>3</ruleno>
					<ruleno>4</ruleno>
				</right>
			</rules>
		</nonterminal>
		<nonterminal>
			<text>M</text>
			<symbolno>13</symbolno>
			<rules>
				<left>
					<ruleno>7</ruleno>
					<ruleno>8</ruleno>
				</left>
				<right>
					<ruleno>6</ruleno>
				</right>
			</rules>
		</nonterminal>
  </symbols>

<!-- The Automaton -->
  <automaton>
  		<state>
			<stateno>0</stateno>
			<rules>
				<rule>
					<ruleno>0</ruleno>
					<dotpos>0</dotpos>
				</rule>
			</rules>
			<actions>
				<shift>
					<terminal>'a'</terminal>
					<transition>1</transition>
				</shift>
				<shift>
					<terminal>'('</terminal>
					<transition>2</transition>
				</shift>
				<goto>
					<nonterminal>L</nonterminal>
					<transition>3</transition>
				</goto>
				<goto>
					<nonterminal>E</nonterminal>
					<transition>4</transition>
				</goto>
				<goto>
					<nonterminal>P</nonterminal>
					<transition>5</transition>
				</goto>
			</actions>
  		</state>
		
		<state>
			<stateno>1</stateno>
			<rules>
				<rule>
					<ruleno>5</ruleno>
					<dotpos>1</dotpos>
				</rule>
			</rules>
			<actions>
				<reduce>
					<terminal>$default</terminal>
					<ruleno>5</ruleno>
				</reduce>
			</actions>
		</state>

		<state>
			<stateno>2</stateno>
			<rules>
				<rule>
					<ruleno>6</ruleno>
					<dotpos>2</dotpos>
				</rule>
			</rules>
			<actions>
				<shift>
					<terminal>'a'</terminal>
					<transition>1</transition>
				</shift>
				<shift>
					<terminal>'('</terminal>
					<transition>2</transition>
				</shift>
				<reduce>
					<terminal>$default</terminal>
					<ruleno>7</ruleno>
				</reduce>
				<goto>
					<nonterminal>L</nonterminal>
					<transition>6</transition>
				</goto>
				<goto>
					<nonterminal>E</nonterminal>
					<transition>4</transition>
				</goto>
				<goto>
					<nonterminal>P</nonterminal>
					<transition>5</transition>
				</goto>
				<goto>
					<nonterminal>M</nonterminal>
					<transition>7</transition>
				</goto>
			</actions>
		</state>
		<state>
			<stateno>3</stateno>
			<rules>
				<rule>
					<ruleno>0</ruleno>
					<dotpos>1</dotpos>
				</rule>
				<rule>
					<ruleno>1</ruleno>
					<dotpos>1</dotpos>
				</rule>
			</rules>
			<actions>
				<shift>
					<terminal>$end</terminal>
					<transition>8</transition>
				</shift>
				<shift>
					<terminal>';'</terminal>
					<transition>9</transition>
				</shift>
			</actions>
		</state>
		<state>
			<stateno>4</stateno>
			<rules>
				<rule>
					<ruleno>2</ruleno>
					<dotpos>1</dotpos>
				</rule>
				<rule>
					<ruleno>3</ruleno>
					<dotpos>1</dotpos>
				</rule>
			</rules>
			<actions>
				<shift>
					<terminal>','</terminal>
					<transition>10</transition>
				</shift>
				<reduce>
					<terminal>$default</terminal>
					<ruleno>2</ruleno>
				</reduce>
			</actions>
		</state>

		<!-- similiar tags for other states-->
		<!-- The state below is an accepting state -->
		<state>
			<stateno>8</stateno>
			<rules>
				<rule>
					<ruleno>0</ruleno>
					<dotpos>2</dotpos>
				</rule>
			</rules>
			<actions>
				<accept />
			</actions>
		</state>
  </automaton>
</report>

Attachment: g1.output
Description: Binary data

Reply via email to