mirror of
https://shylinux.com/x/ContextOS
synced 2025-04-25 16:58:06 +08:00
opt some
This commit is contained in:
parent
de72a7d0ed
commit
30af237e83
13
etc/init.shy
13
etc/init.shy
@ -85,3 +85,16 @@
|
||||
|
||||
~gdb
|
||||
event action listen event dream.create cmd web.code.tmux.session
|
||||
|
||||
|
||||
~yac
|
||||
matrix create shy 32 32
|
||||
matrix insert shy num num "[0-9]*"
|
||||
matrix insert shy key key "[a-z0-9]*"
|
||||
matrix insert shy stm stm "if key < num"
|
||||
return
|
||||
matrix insert shy num num [0-9]*
|
||||
matrix insert shy str str \"[a-h]*\"
|
||||
matrix insert shy op2 op2 >
|
||||
matrix insert shy op2 op2 >=
|
||||
matrix insert shy exp exp num op2 num
|
||||
|
@ -4,70 +4,3 @@ import (
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Frame struct {
|
||||
Key string
|
||||
Run bool
|
||||
Pos int
|
||||
|
||||
deep int
|
||||
Done bool
|
||||
Data interface{}
|
||||
Hash map[string]interface{}
|
||||
Label map[string]int
|
||||
}
|
||||
|
||||
func (f *Frame) String(meta string) string {
|
||||
return fmt.Sprintf("%s%s%d %s %t", strings.Repeat("#", f.deep), meta, f.deep, f.Key, f.Run)
|
||||
}
|
||||
|
||||
var bottom = &Frame{}
|
||||
|
||||
type Stack struct {
|
||||
Target interface{}
|
||||
FS []*Frame
|
||||
}
|
||||
|
||||
func (s *Stack) Push(key string, run bool, pos int) *Frame {
|
||||
s.FS = append(s.FS, &Frame{Key: key, Run: run, Pos: pos, deep: len(s.FS), Hash: map[string]interface{}{}})
|
||||
return s.FS[len(s.FS)-1]
|
||||
}
|
||||
func (s *Stack) Peek() *Frame {
|
||||
if len(s.FS) == 0 {
|
||||
return bottom
|
||||
}
|
||||
return s.FS[len(s.FS)-1]
|
||||
}
|
||||
func (s *Stack) Pop() *Frame {
|
||||
if len(s.FS) == 0 {
|
||||
return bottom
|
||||
}
|
||||
f := s.FS[len(s.FS)-1]
|
||||
s.FS = s.FS[:len(s.FS)-1]
|
||||
return f
|
||||
}
|
||||
func (s *Stack) Hash(key string, val ...interface{}) (interface{}, bool) {
|
||||
for i := len(s.FS) - 1; i >= 0; i-- {
|
||||
if v, ok := s.FS[i].Hash[key]; ok {
|
||||
if len(val) > 0 {
|
||||
s.FS[i].Hash[key] = val[0]
|
||||
}
|
||||
return v, ok
|
||||
}
|
||||
}
|
||||
|
||||
if len(val) > 0 {
|
||||
s.FS[len(s.FS)-1].Hash[key] = val[0]
|
||||
return val[0], true
|
||||
}
|
||||
return nil, false
|
||||
}
|
||||
func (s *Stack) Label(key string) (int, bool) {
|
||||
for i := len(s.FS) - 1; i >= 0; i-- {
|
||||
if v, ok := s.FS[i].Label[key]; ok {
|
||||
s.FS = s.FS[:i+1]
|
||||
return v, ok
|
||||
}
|
||||
}
|
||||
return -1, false
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user