[Top][All Lists]
[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
+ *
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pingus-CVS] r3470 - trunk/pingus/contrib,
grumbel at BerliOS <=