[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pingus-CVS] r3490 - trunk/sexpr
From: |
grumbel at BerliOS |
Subject: |
[Pingus-CVS] r3490 - trunk/sexpr |
Date: |
Sun, 4 Nov 2007 15:23:27 +0100 |
Author: grumbel
Date: 2007-11-04 15:23:27 +0100 (Sun, 04 Nov 2007)
New Revision: 3490
Modified:
trunk/sexpr/level-syntax.scm
trunk/sexpr/parser.rb
trunk/sexpr/schema.rb
trunk/sexpr/sexpr.rb
Log:
- added parent tracking
Modified: trunk/sexpr/level-syntax.scm
===================================================================
--- trunk/sexpr/level-syntax.scm 2007-11-04 13:54:27 UTC (rev 3489)
+++ trunk/sexpr/level-syntax.scm 2007-11-04 14:23:27 UTC (rev 3490)
@@ -92,13 +92,19 @@
(element (name "entrance")
(type (mapping
(children
- (element (name "owner-id") (type (any)))
+ (element (name "owner-id") (type (integer
(min 0) (max 4))))
(element (name "release-rate") (type (integer)))
- (element (name "position") (type (vector3i)))
- (element (name "direction") (type (any)))
- (element (name "type") (type (any)))
+ (element (name "position") (type
(vector3i)))
+ (element (name "direction") (type (any)))
+ (element (name "type") (type (any)))
))))
+ (element (name "solidcolor-background")
+ (type (any)))
+
+ (element (name "starfield-background")
+ (type (any)))
+
(element (name "spike")
(type (any)))
@@ -132,12 +138,6 @@
(element (name "switchdoor")
(type (any)))
- (element (name "solidcolor-background")
- (type (any)))
-
- (element (name "starfield-background")
- (type (any)))
-
(element (name "thunderstorm-background")
(type (any)))
Modified: trunk/sexpr/parser.rb
===================================================================
--- trunk/sexpr/parser.rb 2007-11-04 13:54:27 UTC (rev 3489)
+++ trunk/sexpr/parser.rb 2007-11-04 14:23:27 UTC (rev 3490)
@@ -77,20 +77,21 @@
@tokens.each{ |token|
if token.is_a?(SExpr) then
if not sublists.empty? then
- sublists.last().append(token)
+ token.parent = sublists.last()
+ sublists.last() << token
else
elements << token
end
elsif token.is_a?(Array) then
if token[0] == :list_start then
- sublists.push(List.new([], token[1]))
+ sublists.push(List.new([], token[1], token[2]))
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)
+ sublists.last() << lst
else
elements << lst
end
@@ -234,41 +235,44 @@
# FIXME: This refers to the end of the token, not the start
pretty_pos = "address@hidden:address@hidden"
+
+ parent = nil
case type
when :boolean
- @tokens << Boolean.new(current_token == "#t", pretty_pos)
+ @tokens << Boolean.new(current_token == "#t", parent, pretty_pos)
when :integer
- @tokens << Integer.new(current_token.to_i, pretty_pos)
+ @tokens << Integer.new(current_token.to_i, parent, pretty_pos)
when :real
- @tokens << Real.new(current_token.to_f, pretty_pos)
+ @tokens << Real.new(current_token.to_f, parent, pretty_pos)
when :string
@tokens << String.new(current_token[1..-2].
gsub("\\n", "\n").
gsub("\\\"", "\"").
gsub("\\t", "\t"),
+ parent,
pretty_pos)
when :symbol
- @tokens << Symbol.new(current_token, pretty_pos)
+ @tokens << Symbol.new(current_token, parent, pretty_pos)
when :list_start
- @tokens << [:list_start, pretty_pos]
+ @tokens << [:list_start, parent, pretty_pos]
when :list_end
- @tokens << [:list_end, pretty_pos]
+ @tokens << [:list_end, parent, pretty_pos]
when :comment
if @parse_comments then
- @tokens << Comment.new(current_token, pretty_pos)
+ @tokens << Comment.new(current_token, parent, pretty_pos)
end
when :whitespace
if @parse_whitespace then
- @tokens << Whitespace.new(current_token, pretty_pos)
+ @tokens << Whitespace.new(current_token, parent, pretty_pos)
end
else
Modified: trunk/sexpr/schema.rb
===================================================================
--- trunk/sexpr/schema.rb 2007-11-04 13:54:27 UTC (rev 3489)
+++ trunk/sexpr/schema.rb 2007-11-04 14:23:27 UTC (rev 3490)
@@ -151,7 +151,7 @@
end
def validate(sexprlst)
- # always ok
+ Schema.report "#{sexprlst.pos}: AnyType: #{sexprlst.parent.to_sexpr}"
end
end
@@ -178,7 +178,7 @@
def validate(sexprlst)
if sexprlst.length() != 1 then
- Schema.report "#{sexpr.pos}: expected a single String got
#{sexpr.to_s}"
+ Schema.report "#{sexprlst.pos}: expected a single String got
#{sexprlst.to_s}"
else
if not sexprlst[0].is_a?(String) then
Schema.report "#{sexprlst.pos}: expected String got
#{sexprlst[0].class}"
Modified: trunk/sexpr/sexpr.rb
===================================================================
--- trunk/sexpr/sexpr.rb 2007-11-04 13:54:27 UTC (rev 3489)
+++ trunk/sexpr/sexpr.rb 2007-11-04 14:23:27 UTC (rev 3490)
@@ -20,11 +20,13 @@
module SExpr
class SExpr
- attr_reader :pos, :parent
+ attr_reader :pos
+ attr_accessor :parent
# FIXME: Implement parent handling
- def initialize(pos = nil)
- @pos = pos
+ def initialize(parent = nil, pos = nil)
+ @pos = pos
+ @parent = parent
end
def self.parse(str)
@@ -39,14 +41,20 @@
def to_ruby()
return @value
end
+
+ def to_sexpr()
+ out = ""
+ write(out)
+ return out
+ end
end
# Boolean
class Boolean < SExpr
attr_reader :value
- def initialize(value, pos = nil)
- super(pos)
+ def initialize(value, parent = nil, pos = nil)
+ super(parent, pos)
@value = value
end
@@ -63,8 +71,8 @@
class Integer < SExpr
attr_reader :value
- def initialize(value, pos = nil)
- super(pos)
+ def initialize(value, parent = nil, pos = nil)
+ super(parent, pos)
@value = value
end
@@ -77,8 +85,8 @@
class Real < SExpr
attr_reader :value
- def initialize(value, pos = nil)
- super(pos)
+ def initialize(value, parent = nil, pos = nil)
+ super(parent, pos)
@value = value
end
@@ -91,8 +99,8 @@
class String < SExpr
attr_reader :value
- def initialize(value, pos = nil)
- super(pos)
+ def initialize(value, parent = nil, pos = nil)
+ super(parent, pos)
@value = value
end
@@ -109,8 +117,8 @@
class Symbol < SExpr
attr_reader :value
- def initialize(value, pos = nil)
- super(pos)
+ def initialize(value, parent = nil, pos = nil)
+ super(parent, pos)
@value = value # FIXME: Is this supposed to be a String or Symbol?
end
@@ -125,8 +133,8 @@
attr_reader :children, :value
- def initialize(value, pos = nil)
- super(pos)
+ def initialize(value, parent = nil, pos = nil)
+ super(parent, pos)
@value = value
end
@@ -141,9 +149,9 @@
def [](idx)
if idx.is_a?(Range) then
if idx.begin < @value.length then
- return List.new(@value[idx], @value[idx.begin].pos)
+ return List.new(@value[idx], self, @value[idx.begin].pos)
else # FIXME: When is this called?
- return List.new(@value[idx], self.pos)
+ return List.new(@value[idx], self, self.pos)
end
else
return @value[idx]
@@ -185,15 +193,15 @@
end
def Whitespace
- def initialize(value, pos = nil)
- super(pos)
+ def initialize(value, parent = nil, pos = nil)
+ super(parent, pos)
@value = value
end
end
def Comment
- def initialize(value, pos = nil)
- super(pos)
+ def initialize(value, parent = nil, pos = nil)
+ super(parent, pos)
@value = value
end
end
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pingus-CVS] r3490 - trunk/sexpr,
grumbel at BerliOS <=