<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>examples/class.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -18,6 +18,8 @@ Operators = {
 
   &quot;*&quot;  =&gt; Oper.new(20, :mul,    :infix),
   &quot;/&quot;  =&gt; Oper.new(20, :div,    :infix),
+
+  &quot;.&quot;  =&gt; Oper.new(90, :callm,  :infix),
   
   &quot;[&quot;  =&gt; Oper.new(99, :index,  :infix),
   &quot;]&quot;  =&gt; Oper.new(99, nil,     :rp),</diff>
      <filename>operators.rb</filename>
    </modified>
    <modified>
      <diff>@@ -84,16 +84,27 @@ class Parser &lt; ParserBase
     exps = zero_or_more(:defexp)
     vars = deep_collect(exps,Array) {|node| node[0] == :assign ? node[1] : nil}
     exps = [:let,vars] + exps 
-    raise &quot;Expected expression of 'end'&quot; if !@s.expect(&quot;end&quot;)
+    raise &quot;Expected expression or 'end'&quot; if !@s.expect(&quot;end&quot;)
     return [:defun, name, args, exps]
   end
 
   def parse_sexp; @sexp.parse; end
 
-  # exp ::= ws* (def | sexp)
+  # class ::= &quot;class&quot; ws* name ws* exp* &quot;end&quot;
+  def parse_class
+    return nil if !@s.expect(&quot;class&quot;)
+    @s.ws
+    raise &quot;Expected class name&quot; if !(name = @s.expect(Atom))
+    @s.ws
+    exps = zero_or_more(:exp)
+    raise &quot;Expected expression or 'end'&quot; if !@s.expect(&quot;end&quot;)
+    return [:class,name,exps]
+  end
+
+  # exp ::= ws* (class | def | sexp)
   def parse_exp
     @s.ws
-    parse_def || parse_sexp || @shunting.parse
+    parse_class || parse_def || parse_sexp || @shunting.parse
   end
 
   # program ::= exp* ws*</diff>
      <filename>parser.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>068cb642600dca03a611007d674c19dc7b33b749</id>
    </parent>
  </parents>
  <author>
    <name>Vidar Hokstad</name>
    <login>vidarh</login>
    <email>vidar@hokstad.com</email>
  </author>
  <url>http://github.com/vidarh/writing-a-compiler-in-ruby/commit/b5d5d72eae4dae022be549dd57bfdad4c3d79186</url>
  <id>b5d5d72eae4dae022be549dd57bfdad4c3d79186</id>
  <committed-date>2009-02-24T11:06:56-08:00</committed-date>
  <authored-date>2009-02-24T11:06:56-08:00</authored-date>
  <message>Started adding support for parsing 'class' and method calls (preliminary only)</message>
  <tree>5edd1d5adb1ae84600ea1be9fe85dcc0c6774619</tree>
  <committer>
    <name>Vidar Hokstad</name>
    <login>vidarh</login>
    <email>vidar@hokstad.com</email>
  </committer>
</commit>
