<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.kram.nz/index.php?action=history&amp;feed=atom&amp;title=SE250%3Alab-8%3Asdal039</id>
	<title>SE250:lab-8:sdal039 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.kram.nz/index.php?action=history&amp;feed=atom&amp;title=SE250%3Alab-8%3Asdal039"/>
	<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE250:lab-8:sdal039&amp;action=history"/>
	<updated>2026-05-01T17:56:30Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.kram.nz/index.php?title=SE250:lab-8:sdal039&amp;diff=8352&amp;oldid=prev</id>
		<title>Mark: 13 revision(s)</title>
		<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE250:lab-8:sdal039&amp;diff=8352&amp;oldid=prev"/>
		<updated>2008-11-03T05:20:31Z</updated>

		<summary type="html">&lt;p&gt;13 revision(s)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;First off it wouldn&amp;#039;t compile. &lt;br /&gt;
 /cygdrive/c/Users/sdal039/AppData/Local/Temp/ccztcwNj.o:lab-8.c:(.text+0x30b): undefined     reference to `_strcimp&amp;#039;&lt;br /&gt;
 collect2: ld returned 1 exit status&lt;br /&gt;
&lt;br /&gt;
Thanks to hpan027 for putting up solution, which was to search for &amp;#039;strcimp&amp;#039; in parsetree.c and replace with &amp;#039;stricmp&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Task 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
k.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Task 2&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 ParseTree* expr = mkNode(&amp;#039;-&amp;#039;,  mkNode(&amp;#039;-&amp;#039;, mkNode(&amp;#039;a&amp;#039;, 0), mkNode(&amp;#039;b&amp;#039;, 0), 0), 0);&lt;br /&gt;
 prefix_tree( expr );&lt;br /&gt;
&lt;br /&gt;
Unfortunately the tree_to_graph function still only seems to produce .dot files, so Graphviz had to be used again to convert the .dot to a .jpeg.&lt;br /&gt;
Sweet, just found the fix for this. Much easier now. Awesome points for those who figured that out.&lt;br /&gt;
&lt;br /&gt;
[http://img81.imageshack.us/my.php?image=graph1og9.jpg Graph 1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Task 3&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 mkNode(&amp;#039;?&amp;#039;, mkNode(&amp;#039;&amp;gt;&amp;#039;, mkNode(&amp;#039;+&amp;#039;, mkNode(&amp;#039;a&amp;#039;, 0), mkNode(&amp;#039;b&amp;#039;, 0), 0), mkNode(&amp;#039;c&amp;#039;, 0)), &lt;br /&gt;
    mkNode(&amp;#039;*&amp;#039;, mkNode(&amp;#039;z&amp;#039;, 0), mkNode(&amp;#039;+&amp;#039;, mkNode(&amp;#039;y&amp;#039;, 0), mkNode(&amp;#039;b&amp;#039;, 0), 0), 0),&lt;br /&gt;
    mkNode(&amp;#039;?&amp;#039;,  mkNode(&amp;#039;=&amp;#039;, mkNode(&amp;#039;a&amp;#039;, 0), mkNode(&amp;#039;2&amp;#039;, 0) , 0 ),&lt;br /&gt;
      mkNode(&amp;#039;-&amp;#039;, mkNode(&amp;#039;x&amp;#039;, 0), mkNode(&amp;#039;y&amp;#039;, 0) , 0 ),&lt;br /&gt;
      mkNode(&amp;#039;-&amp;#039;, mkNode(&amp;#039;y&amp;#039;, 0), mkNode(&amp;#039;x&amp;#039;, 0) , 0 ) , 0 ));&lt;br /&gt;
 prefix_tree( expr2 );&lt;br /&gt;
&lt;br /&gt;
Many parentheses later, this produced&lt;br /&gt;
 ?(&amp;gt;(+(a b) c) *(z +(y b)) ?(=(a 2) -(x y) -(y x)))&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Task 4&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[http://img81.imageshack.us/my.php?image=graph2is1.jpg Graph 2]&lt;br /&gt;
&lt;br /&gt;
There were not any discrepancies between what I had down on paper and what the graph produced. This implies that either there wasn&amp;#039;t supposed to be any differences, or I didn&amp;#039;t make my nodes correctly.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Task 5&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Because the &amp;#039;?&amp;#039; node has three children, there is no ambiguity as to which expression belongs where. The &amp;#039;:&amp;#039; is used in C to differentiate between e1 and e1, whereas this is not needed for the parse tree as e1 and e2 are physically separated.&lt;br /&gt;
For example, with the ternary expression (a == 0) ? b = 5 : b = 4;&lt;br /&gt;
The tokenizer needs the &amp;#039;:&amp;#039; to split up &amp;#039;b = 5&amp;#039; and &amp;#039;b = 4&amp;#039; into different tokens, but once this has been done, the parse tree structure will ensure they remain separated.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Task 6&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Looks hard...&lt;br /&gt;
&lt;br /&gt;
 int eval( ParseTree* t ) {&lt;br /&gt;
    return t-&amp;gt;name;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This code works for individual numbers at least. :P&lt;/div&gt;</summary>
		<author><name>Mark</name></author>
	</entry>
</feed>