From f60ba8d65dd1767b2f6cf7cdcee4e1c7e0a1f4f1 Mon Sep 17 00:00:00 2001 From: "Michael D. Lowis" Date: Wed, 5 Feb 2020 16:50:30 -0500 Subject: [PATCH] added symbol table class --- compile.rb | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/compile.rb b/compile.rb index a6eb88c..7a5ef8e 100755 --- a/compile.rb +++ b/compile.rb @@ -54,6 +54,29 @@ BuiltinSyms = { }, } +class Symtable + def initialize + @builtins = BuiltinSyms + @scopes = [{}] + end + + def []=(k,v) + @scopes.last[k] = v + end + + def [](k) + (@scopes.map{|h| h[k] }.compact.last || BuiltinSyms[k]) + end + + def scope_start + @scopes.push({}) + end + + def scope_stop + @scopes.pop() + end +end + class Lexer Tok = Struct.new(:text, :file, :pos, :type) SPACE = /([ \t\v\n\r]+|#.*\n)/ @@ -527,6 +550,7 @@ class Package @declares = {} @definitions = {} add_file(path) + type_check end def add_file(path) @@ -536,10 +560,6 @@ class Package @definitions = parse.definitions() end - def add_files(paths) - paths.each {|p| add_file(p) } - end - def dump pp({ name: @name, @@ -547,6 +567,9 @@ class Package defines: @definitions }) end + + def type_check + end end pkg = Package.new("example.src") -- 2.52.0