From 84013cb4a02a79c90931473b6976ba21d06e9d48 Mon Sep 17 00:00:00 2001 From: Aidan Hahn Date: Thu, 28 Nov 2019 08:57:12 -0800 Subject: [PATCH] fleshed out GetVar, added Token stack collection, started printing module --- pkg/shsh/{.token.go.swp => .parsers.go.swp} | Bin 12288 -> 12288 bytes pkg/shsh/.stack.go.swp | Bin 0 -> 12288 bytes pkg/shsh/debug.go | 57 ++++++++++++++++++++ pkg/shsh/stack.go | 22 ++++++++ pkg/shsh/token.go | 2 +- pkg/shsh/var_table.go | 10 +++- 6 files changed, 89 insertions(+), 2 deletions(-) rename pkg/shsh/{.token.go.swp => .parsers.go.swp} (75%) create mode 100644 pkg/shsh/.stack.go.swp create mode 100644 pkg/shsh/debug.go create mode 100644 pkg/shsh/stack.go diff --git a/pkg/shsh/.token.go.swp b/pkg/shsh/.parsers.go.swp similarity index 75% rename from pkg/shsh/.token.go.swp rename to pkg/shsh/.parsers.go.swp index 2ffa4f6ad0b41d3908a222ca844f216178d1afb8..38eb4f46a8c2ea95a0a347f79ea7b2bac144dd4f 100644 GIT binary patch literal 12288 zcmeI2PiqrF7>6gt-u#FC0Qh4*M>aL2H3#y3>2Ti!^j$>3C~7#Rk{_8(;%$fDNz# zHoykhz<*)Dr4{iUHyJ2zbGdw04m`_`{9prYfDNz#Hoykh02^QfY=8~00XDz}PM`tV z65_{cA>N%q@%aD0|NDRIoDlE9CfERP!E5jeyaX?R0U@{ww$BRj6MP3--~)IAo`8qo z0aykzU<%v+8RtK+Rk-8(;%$fDNz#Hoykh02^Qf zY~XMM>j#Gr?ZPxEcbPU(UFUV1s!TeYjmRu2zaFKAwJ|*vV!e#VI(K_vZOu-4tY*8) z{FyE{Z>d-(+Mxlvz9M7Y`pXG~(JN}+w`>2lGfEg0J`m2|UAR-53#;`Sr9M`7GNKvM z*2#T=Z~^m21gf)s{_w!Pxy9Pf>|ueXHMye^;nq^MZ@D&3&{zQWDx4-s-WOy_biJF1 zR<-MpG}KqU7Y`SZHl&Qp)<_$y%-0ep8?oBWRA>E$J*8wbGDXrrBRx*^1@9ha+oWQZ zV5eLJV|{JIy>=?PO%4a`6j@7%Q6vw9(AP9udBM1gp#7VPf}BKh94e$zce@_jqpWwA-PxoN zg0g5ZV_5)xN9fCNY2QmGP1s7ER;pz^JrT5*6I|2MO1d+j*%&`Z&b^vll7n|br* zKW{dQvgZ!HxVXfRl@BwN2O0b6tsh^$Jau(%bq`~`AX2g?A~Nk(HbfjIt}AyNL$=p5 zhm~bkJ3oCIq?pDI}j;W|%UHIir@L%q%-6~)exLE}f)qeWeG&_3a@FAMA zuka*)OZH5g z_F)yU3RnfK0#*U5fK|XMU=^?mSOu&CRspNPZK#0LV(iYl8I$)Qc>MoA`}_aK1B_h< ze}Esr74SW{1il6zfj2-0ya1jDC&5v$4?F}I`15|oeh0sSOW;%RA$S|S0#1SFKm|Mo z9tD3-Gj?eHnZJ-UMer4HUr?u*E816|f3e1*`(MOo462Q6izXZ?BStokTuGubY($Z>%h= zRC%Kt1)Dr{qFDMJE}|%ic(=dP-KI<&w4-6i&fTLBk>Ik;RaaMH?uoX#MQ(x(5pn5r zd?d-V9>y<@mk(;x!hmvJ#6p#38MU(_m57>-=LN24@j2dhyjZZzNKYC7!%S&E)yh6T z)f{-hu5u2xOb|40eECxm#?}*Gl-#Zp4V>sz;-;VUu#Pm9nHjzqFUXEmBZFI_?IfP6 z4i=*6E#XO;UF1bZ?X2X2o8u}(2fsD zFl-%mu)MZ3f1=KY%~Vevkfuh239ev`6`jfWVP!6dS6gk=7ne`6%#=ONGH^uKWoyiA zJT#^6>*J^NS=D1l@@Mj{M?BOPR~uuiU@M-C)x^Dw`Vi+!!;y^SkQPq+8&S@<34>TF z8TeQY)m$uk0Q!BgS!&St#skl;gG1H%H7Vz2M{=&eC!KDY-r7&GRIKI}&JveyM9$DZ z9z2kIZ0;( z!tm^BlN*lqO!gZ9Pfi^}XV*@Am)DRiCU)a@mhaa`OItCQJk4(D!)4oX#g^$tn{?2* zqGO@NZFFu4r3;sLaK0q$zF)B`7xA*j=S#QnCYYY!3UL|}m)J?wUD$-TQveCy`(3soZ-1V8`;KmY_l00ck)1VCWE37EV= zN3w-W^)_zTW8=56e#8I*AOHd&00JNY0w4eaAOHd&00JN|hXlet(f#X0Z$EudMSD#S`pn5T@zgqT^5~+=U35t(L0e{!>u!ioX|1| zfB*=900@8p2!H?xfB*=9!2c3B_) z_UZ!7t7mhnjJo1Xq7I@k52M)ZwOZs#58Ra{>Q&P?aj)V5&$4-KojbfwgEEb{so8&K zPpf85wIJ+aAk_eYU6W=_grvrAGh& literal 0 HcmV?d00001 diff --git a/pkg/shsh/debug.go b/pkg/shsh/debug.go new file mode 100644 index 0000000..8cd5371 --- /dev/null +++ b/pkg/shsh/debug.go @@ -0,0 +1,57 @@ +package shsh + +import ( + "collections" +) + +func FmtToken(arg *Token) string { + suffix := "" + if arg.next != nil { + suffix = "->" + } + + switch arg.tag { + case LIST: + return sprintf("(%s, List @ %p, %d)%s", "LIST", arg._inner, + arg.position, suffix) + + default: + return sprintf("(%s, %s, %d)%s", GetTagAsStr(arg.tag), arg._inner, + arg.position, suffix) + } +} + +func GetTagAsStr(tag token_t) string { + switch tag { + case LIST: + return "LIST" + case STRING: + return "STRING" + case NUMBER: + return "NUMBER" + case SYMBOL: + return "SYMBOL" + } +} + +func PrintSExpression(arg *Token) { + var lists Stack; + lists.push(arg) + +loop: + // string builder? + i := lists.pop() + if i == nil { + goto done + } + + for (iter := i; iter != nil; iter = i.next { + // add each string to string builder? + } + + // print stringbuilder? + goto loop + +done: + // TODO: Perhaps print some debug analytics here +} diff --git a/pkg/shsh/stack.go b/pkg/shsh/stack.go new file mode 100644 index 0000000..21d7daa --- /dev/null +++ b/pkg/shsh/stack.go @@ -0,0 +1,22 @@ +package shsh + +type TokenStack struct { + buffer []*Token + int capacity +} + +func (s *Stack) Push(v *Token) { + s.capacity++ + *s.buffer = append(*s.buffer, v) +} + +func (s *Stack) Pop() *Token { + if s.capacity <= 0 { + return nil + } + + s.capacity-- + res := *s.buffer[len(*s.buffer) - 1] + *s = *s.buffer[ :len(*s) - 1] + return ret +} diff --git a/pkg/shsh/token.go b/pkg/shsh/token.go index bdb8626..40d85a0 100644 --- a/pkg/shsh/token.go +++ b/pkg/shsh/token.go @@ -14,7 +14,7 @@ const ( type Token struct { next *Token - tag parse_tag + tag token_t int position _inner interface{} } diff --git a/pkg/shsh/var_table.go b/pkg/shsh/var_table.go index 147ac1f..0d7d807 100644 --- a/pkg/shsh/var_table.go +++ b/pkg/shsh/var_table.go @@ -13,5 +13,13 @@ var ( // Library represents variables defined in inner scope // It is assumed library is ordered from innermost scope to outermost scope func GetVar(arg string, library []VarTable) *Token { - + for dict, scope := library { + val, ok := dict[arg] + if ok { + // TODO: maybe log which scope it was found in? + return val + } + } + + return nil }