[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pingus-CVS] r3469 - trunk/pingus/contrib
From: |
grumbel at BerliOS |
Subject: |
[Pingus-CVS] r3469 - trunk/pingus/contrib |
Date: |
Fri, 2 Nov 2007 20:06:40 +0100 |
Author: grumbel
Date: 2007-11-02 20:06:40 +0100 (Fri, 02 Nov 2007)
New Revision: 3469
Modified:
trunk/pingus/contrib/sexpr.rb
Log:
- a few bug fixes
Modified: trunk/pingus/contrib/sexpr.rb
===================================================================
--- trunk/pingus/contrib/sexpr.rb 2007-11-02 16:36:02 UTC (rev 3468)
+++ trunk/pingus/contrib/sexpr.rb 2007-11-02 19:06:40 UTC (rev 3469)
@@ -1,7 +1,6 @@
#!/usr/bin/ruby -w
module SExpr
-
class Lexer
attr_reader :tokens
@@ -58,25 +57,27 @@
sublists = []
@tokens.each{ |token|
- if token == :list_start then
- sublists.push(List.new([], nil))
- elsif token == :list_end then
- if sublists.empty? then
- raise "Unexpected List end"
- else
- lst = sublists.pop()
- if not sublists.empty? then
- sublists.last().append(lst)
- else
- elements << lst
- end
- end
- elsif token.is_a?(SExpr) then
+ if token.is_a?(SExpr) then
if not sublists.empty? then
sublists.last().append(token)
else
elements << token
end
+ elsif token.is_a?(Array) then
+ if token[0] == :list_start then
+ sublists.push(List.new([], token[1]))
+ elsif token[0] == :list_end then
+ if sublists.empty? then
+ raise "Unexpected List end"
+ else
+ lst = sublists.pop()
+ if not sublists.empty? then
+ sublists.last().append(lst)
+ else
+ elements << lst
+ end
+ end
+ end
else
raise "Parser bug: parse: #{token}"
end
@@ -152,7 +153,11 @@
elsif c == ?. then
@state = :parse_real
else
- submit(:integer, false)
+ if @token_start == @pos - 1 and not is_digit(@address@hidden) then
+ raise "address@hidden:address@hidden:
'address@hidden@token_start].chr}' must be followed by digit"
+ else
+ submit(:integer, false)
+ end
end
when :parse_boolean:
@@ -223,7 +228,7 @@
@tokens << Real.new(current_token.to_f, get_pos())
when :string
- @tokens << String.new(current_token.
+ @tokens << String.new(current_token[1..-2].
gsub("\\n", "\n").
gsub("\\\"", "\"").
gsub("\\t", "\t"),
@@ -233,10 +238,10 @@
@tokens << Symbol.new(current_token, get_pos())
when :list_start
- @tokens << :list_start
+ @tokens << [:list_start, get_pos()]
when :list_end
- @tokens << :list_end
+ @tokens << [:list_end, get_pos()]
when :comment
# ignore
@@ -266,7 +271,11 @@
end
def to_s()
- return @value.to_s
+ if @value then
+ return "#t"
+ else
+ return "#f"
+ end
end
end
@@ -308,7 +317,7 @@
end
def to_s()
- return @value.to_s
+ return @value.to_s # inspect
end
end
@@ -345,8 +354,9 @@
end
end
+
if ARGV.empty?() then
- lexer = SExpr::Lexer.new("(pingus-level a (b 1.5) 5)")
+ lexer = SExpr::Lexer.new("(-pi8ngulevel -.51 a (b +1.5) -5)")
puts lexer.parse()
else
ARGV.each{|filename|
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pingus-CVS] r3469 - trunk/pingus/contrib,
grumbel at BerliOS <=