pingus-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Pingus-CVS] r3470 - trunk/pingus/contrib


From: grumbel at BerliOS
Subject: [Pingus-CVS] r3470 - trunk/pingus/contrib
Date: Sat, 3 Nov 2007 07:18:57 +0100

Author: grumbel
Date: 2007-11-03 07:18:56 +0100 (Sat, 03 Nov 2007)
New Revision: 3470

Added:
   trunk/pingus/contrib/sexpr_test.rb
Modified:
   trunk/pingus/contrib/sexpr.rb
Log:
- some more bug fixes and cleanup

Modified: trunk/pingus/contrib/sexpr.rb
===================================================================
--- trunk/pingus/contrib/sexpr.rb       2007-11-02 19:06:40 UTC (rev 3469)
+++ trunk/pingus/contrib/sexpr.rb       2007-11-03 06:18:56 UTC (rev 3470)
@@ -1,16 +1,6 @@
-#!/usr/bin/ruby -w
-
 module SExpr
-  class Lexer
-    attr_reader :tokens
-
-    def initialize(str)
-      @state = :look_for_token
-      # puts str.inspect
-      # puts
-      lex(str)
-    end
-
+  class Parser
+
     def is_digit(c)
       return (?0..?9).member?(c)
     end
@@ -51,8 +41,15 @@
       return(c == ?+ or
              c == ?-)
     end
+
+    def initialize(str)
+      @str = str
+    end
 
     def parse()
+      @state = :look_for_token
+      tokenize()
+
       elements = []
       sublists = []
 
@@ -86,10 +83,10 @@
       return elements
     end
 
-    def lex(str)
+    def tokenize()
       @line   = 1
       @column = 1
-      @str = str
+
       @last_c = nil
       @tokens = []
 
@@ -97,8 +94,8 @@
       @token_start = @pos
       
       @advance = true
-      while(@pos < str.length) do
-        @c = address@hidden
+      while(@pos < @str.length) do
+        @c = @address@hidden
 
         scan(@c)
         
@@ -255,12 +252,21 @@
       # puts "#{current_token.inspect} => #{type} : 
address@hidden:address@hidden"
     end
   end
-
+
   class SExpr
     def initialize(pos = nil)
     end
+
+    def self.parse(str)
+      parser = Parser.new(str)
+      return parser.parse()
+    end
+
+    def write(out)
+      out << to_s()
+    end
   end
-
+
   # Boolean
   class Boolean < SExpr
     attr_reader :value
@@ -278,7 +284,7 @@
       end
     end
   end
-
+
   # 1025
   class Integer < SExpr
     attr_reader :value
@@ -292,7 +298,7 @@
       return @value.to_s
     end
   end
-
+
   # 5.1
   class Real < SExpr
     attr_reader :value
@@ -306,7 +312,7 @@
       return @value.to_s
     end
   end
-
+
   # "foo"
   class String < SExpr
     attr_reader :value
@@ -319,8 +325,12 @@
     def to_s()
       return @value.to_s # inspect
     end
+    
+    def write(out)
+      out << @value.inspect
+    end
   end
-
+
   # foo
   class Symbol < SExpr
     attr_reader :value
@@ -334,7 +344,7 @@
       return @value.to_s
     end
   end
-
+
   # (foo bar baz)
   class List < SExpr
     attr_reader :children  
@@ -351,18 +361,18 @@
     def to_s()
       return "(" + @value.map{|i| i.to_s}.join(" ") + ")"
     end
+
+    def write(out)
+      out << "("
+      @value.each_with_index{|i, idx|
+        i.write(out)
+        if (idx != @value.length()-1) then
+          out << " "
+        end
+      }
+      out << ")"
+    end
   end
 end
-
-
-if ARGV.empty?() then
-  lexer = SExpr::Lexer.new("(-pi8ngulevel -.51 a (b +1.5) -5)")
-  puts lexer.parse()
-else
-  ARGV.each{|filename|
-    lexer = SExpr::Lexer.new(File.new(filename).read())
-    puts lexer.parse()
-  }
-end
-
+
 # EOF #

Added: trunk/pingus/contrib/sexpr_test.rb
===================================================================
--- trunk/pingus/contrib/sexpr_test.rb  2007-11-02 19:06:40 UTC (rev 3469)
+++ trunk/pingus/contrib/sexpr_test.rb  2007-11-03 06:18:56 UTC (rev 3470)
@@ -0,0 +1,17 @@
+#!/usr/bin/ruby -w
+
+require "sexpr.rb"
+
+if ARGV.empty?() then
+  puts SExpr::SExpr.parse("(pi8ngulevel -.51 a (b +1.5) -5)")
+else
+  ARGV.each{|filename|
+    sexpr = SExpr::SExpr.parse(File.new(filename).read())
+    sexpr.each{|el|
+      el.write($stdout)
+    }
+  }
+end
+
+# EOF #
+


Property changes on: trunk/pingus/contrib/sexpr_test.rb
___________________________________________________________________
Name: svn:executable
   + *





reply via email to

[Prev in Thread] Current Thread [Next in Thread]