add class trees

pull/1/head
an 2018-12-28 17:56:57 -05:00
parent 02a60ae008
commit 61aee2fe84
20 changed files with 28471 additions and 0 deletions

1432
trees/tree_g2.4.0.txt Normal file

File diff suppressed because it is too large Load Diff

1458
trees/tree_g3.0.0.txt Normal file

File diff suppressed because it is too large Load Diff

1458
trees/tree_g3.0.1.txt Normal file

File diff suppressed because it is too large Load Diff

1481
trees/tree_g3.1.0.txt Normal file

File diff suppressed because it is too large Load Diff

1482
trees/tree_g3.2.0.txt Normal file

File diff suppressed because it is too large Load Diff

1482
trees/tree_g3.2.1.txt Normal file

File diff suppressed because it is too large Load Diff

1482
trees/tree_g3.2.2.txt Normal file

File diff suppressed because it is too large Load Diff

1482
trees/tree_g3.2.3.txt Normal file

File diff suppressed because it is too large Load Diff

1482
trees/tree_g3.2.4.txt Normal file

File diff suppressed because it is too large Load Diff

1482
trees/tree_g3.2.5.txt Normal file

File diff suppressed because it is too large Load Diff

1515
trees/tree_g3.3.0.txt Normal file

File diff suppressed because it is too large Load Diff

1515
trees/tree_g3.3.1.txt Normal file

File diff suppressed because it is too large Load Diff

1515
trees/tree_g3.3.2.txt Normal file

File diff suppressed because it is too large Load Diff

1516
trees/tree_g3.4.0.txt Normal file

File diff suppressed because it is too large Load Diff

1516
trees/tree_g3.4.1.txt Normal file

File diff suppressed because it is too large Load Diff

1517
trees/tree_g3.5.0.txt Normal file

File diff suppressed because it is too large Load Diff

1517
trees/tree_g3.5.1.txt Normal file

File diff suppressed because it is too large Load Diff

1519
trees/tree_g3.6.0.txt Normal file

File diff suppressed because it is too large Load Diff

1531
trees/tree_g3.7.0.txt Normal file

File diff suppressed because it is too large Load Diff

89
zsclasstree.rb Normal file
View File

@ -0,0 +1,89 @@
#!/usr/bin/env ruby
## Distributed under the CC0 public domain license.
## Originally by Alison Sanderson.
## <https://creativecommons.org/publicdomain/zero/1.0/legalcode>
## ZSClassTree: Generates a class tree from ZScript files.
require 'set'
$c = {}
$s = Set[]
$st = Set[]
$cap = {}
def procm m
k = (m[1] or "Object").strip
v = m[0].strip
$cap[k.upcase] = k; k = k.upcase
$cap[v.upcase] = v; v = v.upcase
return if k == v
$c[k] ? $c[k] << v : $c[k] = [v]
raise "duplicate class #{v}" if $s === v
$s << v
end
def procs m
cl = m[0]
$cap[cl.upcase] = cl
$st << [cl.upcase]
end
def procf fp
t = fp.read
t.gsub! /\/\*(?!\*\/)+\*\//m, ''
t.gsub! /\/\/.+/, ''
sc = t.scan /^class\s*(\w*)[\s\w]+(?::\s+(\w*))?/
sc.each do |cl| procm cl end unless sc.empty?
sc = t.scan /^struct\s*(\w*)/
sc.each do |cl| procs cl end unless sc.empty?
end
dir = ARGV.shift
Dir.glob dir do |item|
procf open item, "rt"
end
$s1 = Set[]
def procc bcl, t
raise "duplicate class #{bcl}" if $s1 === bcl
$s1 << bcl
return nil unless t
m = {}
for cl in t do m[cl] = procc cl, $c[cl] end
m
end
ft = procc("OBJECT", $c["OBJECT"])
def printc bcl, t, tab = ""
return unless t
return if ARGV.include? bcl
t = t.map do |k, v| [k, v] end
t.sort!
for k, v in t
l = k == t[-1][0]
s = tab.clone
s << (l ? "" : "")
s << " "
s << $cap[k]
puts s
printc k, v, l ? tab + " " : tab + ""
end
end
raise "missing classes: #{($s - $s1).to_a}" unless ($s - $s1).empty?
puts "Object"
printc "OBJECT", ft
puts "Struct"
printc "STRUCT", $st