mirror of
https://shylinux.com/x/ContextOS
synced 2025-04-26 17:24:05 +08:00
mac add {[]}
This commit is contained in:
parent
39bb3e0583
commit
c718391248
18
etc/init.shy
18
etc/init.shy
@ -1,12 +1,22 @@
|
|||||||
login root root
|
var a = {\
|
||||||
|
context: [hello context world]\
|
||||||
|
message: [hello message world]\
|
||||||
|
hi: [\
|
||||||
|
hello\
|
||||||
|
world\
|
||||||
|
]\
|
||||||
|
}
|
||||||
|
for index $a key
|
||||||
|
echo $key
|
||||||
|
for index $a $key value
|
||||||
|
echo $key $value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
source etc/local.shy
|
source etc/local.shy
|
||||||
|
|
||||||
~file1
|
~file1
|
||||||
history load etc/history.txt
|
history load etc/history.txt
|
||||||
|
|
||||||
alias import nfs
|
alias import nfs
|
||||||
alias send send
|
alias send send
|
||||||
alias dial dial
|
alias dial dial
|
||||||
|
|
||||||
config debug on
|
|
||||||
|
@ -20,6 +20,7 @@ type Frame struct {
|
|||||||
run bool
|
run bool
|
||||||
pos int
|
pos int
|
||||||
index int
|
index int
|
||||||
|
list []string
|
||||||
}
|
}
|
||||||
|
|
||||||
type CLI struct {
|
type CLI struct {
|
||||||
@ -111,6 +112,8 @@ func (cli *CLI) Start(m *ctx.Message, arg ...string) bool { // {{{
|
|||||||
|
|
||||||
yac.Cmd("train", "val", "val", "opt{", "op1", "}", "mul{", "num", "key", "str", "exe", "}")
|
yac.Cmd("train", "val", "val", "opt{", "op1", "}", "mul{", "num", "key", "str", "exe", "}")
|
||||||
yac.Cmd("train", "exp", "exp", "val", "rep{", "op2", "val", "}")
|
yac.Cmd("train", "exp", "exp", "val", "rep{", "op2", "val", "}")
|
||||||
|
yac.Cmd("train", "map", "map", "key", ":", "\\[", "rep{", "key", "}", "\\]")
|
||||||
|
yac.Cmd("train", "exp", "exp", "\\{", "rep{", "map", "}", "\\}")
|
||||||
yac.Cmd("train", "val", "val", "opt{", "op1", "}", "(", "exp", ")")
|
yac.Cmd("train", "val", "val", "opt{", "op1", "}", "(", "exp", ")")
|
||||||
|
|
||||||
yac.Cmd("train", "stm", "var", "var", "key", "opt{", "=", "exp", "}")
|
yac.Cmd("train", "stm", "var", "var", "key", "opt{", "=", "exp", "}")
|
||||||
@ -123,7 +126,7 @@ func (cli *CLI) Start(m *ctx.Message, arg ...string) bool { // {{{
|
|||||||
yac.Cmd("train", "stm", "else", "else")
|
yac.Cmd("train", "stm", "else", "else")
|
||||||
yac.Cmd("train", "stm", "end", "end")
|
yac.Cmd("train", "stm", "end", "end")
|
||||||
yac.Cmd("train", "stm", "for", "for", "opt{", "exp", ";", "}", "exp")
|
yac.Cmd("train", "stm", "for", "for", "opt{", "exp", ";", "}", "exp")
|
||||||
yac.Cmd("train", "stm", "for", "for", "index", "exp", "exp", "exp")
|
yac.Cmd("train", "stm", "for", "for", "index", "exp", "opt{", "exp", "}", "exp")
|
||||||
yac.Cmd("train", "stm", "label", "label", "exp")
|
yac.Cmd("train", "stm", "label", "label", "exp")
|
||||||
yac.Cmd("train", "stm", "goto", "goto", "exp", "opt{", "exp", "}", "exp")
|
yac.Cmd("train", "stm", "goto", "goto", "exp", "opt{", "exp", "}", "exp")
|
||||||
yac.Cmd("train", "stm", "return", "return", "rep{", "exp", "}")
|
yac.Cmd("train", "stm", "return", "return", "rep{", "exp", "}")
|
||||||
@ -553,6 +556,21 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
|
|||||||
// }}}
|
// }}}
|
||||||
}},
|
}},
|
||||||
"exp": &ctx.Command{Name: "exp word", Help: "表达式运算", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
"exp": &ctx.Command{Name: "exp word", Help: "表达式运算", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||||
|
if len(arg) > 0 && arg[0] == "{" {
|
||||||
|
msg := m.Spawn()
|
||||||
|
for i := 1; i < len(arg); i++ {
|
||||||
|
key := arg[i]
|
||||||
|
for i += 3; i < len(arg); i++ {
|
||||||
|
if arg[i] == "]" {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
msg.Add("append", key, arg[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m.Echo("%d", msg.Code())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
pre := map[string]int{ // {{{
|
pre := map[string]int{ // {{{
|
||||||
"=": 1,
|
"=": 1,
|
||||||
"+": 2, "-": 2,
|
"+": 2, "-": 2,
|
||||||
@ -637,42 +655,65 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
|
|||||||
}
|
}
|
||||||
} // }}}
|
} // }}}
|
||||||
}},
|
}},
|
||||||
"for": &ctx.Command{Name: "for [express ;] condition", Help: "循环语句, exp: 表达式", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
"for": &ctx.Command{
|
||||||
if cli, ok := m.Target().Server.(*CLI); m.Assert(ok) { // {{{
|
Name: "for [[express ;] condition]|[index message meta value]",
|
||||||
run := m.Caps("parse")
|
Help: "循环语句, express: 每次循环运行的表达式, condition: 循环条件, index: 索引消息, message: 消息编号, meta: value: ",
|
||||||
defer func() { m.Caps("parse", run) }()
|
Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||||
|
if cli, ok := m.Target().Server.(*CLI); m.Assert(ok) { // {{{
|
||||||
|
run := m.Caps("parse")
|
||||||
|
defer func() { m.Caps("parse", run) }()
|
||||||
|
|
||||||
msg := m
|
msg := m
|
||||||
if run {
|
if run {
|
||||||
if arg[1] == "index" {
|
if arg[1] == "index" {
|
||||||
if code, e := strconv.Atoi(arg[2]); m.Assert(e) {
|
if code, e := strconv.Atoi(arg[2]); m.Assert(e) {
|
||||||
msg = cli.Message.Tree(code)
|
msg = cli.Message.Tree(code)
|
||||||
run = run && msg != nil && msg.Meta != nil && len(msg.Meta[arg[3]]) > 0
|
run = run && msg != nil && msg.Meta != nil
|
||||||
}
|
switch len(arg) {
|
||||||
} else {
|
case 4:
|
||||||
run = run && ctx.Right(arg[len(arg)-1])
|
run = run && len(msg.Meta) > 0
|
||||||
}
|
case 5:
|
||||||
|
run = run && len(msg.Meta[arg[3]]) > 0
|
||||||
if len(cli.stack) > 0 {
|
|
||||||
if frame := cli.stack[len(cli.stack)-1]; frame.key == "for" && frame.pos == m.Optioni("file_pos") {
|
|
||||||
if arg[1] == "index" {
|
|
||||||
frame.index++
|
|
||||||
if run = run && len(msg.Meta[arg[3]]) > frame.index; run {
|
|
||||||
m.Cap(arg[4], msg.Meta[arg[3]][frame.index])
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
frame.run = run
|
} else {
|
||||||
return
|
run = run && ctx.Right(arg[len(arg)-1])
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(cli.stack) > 0 {
|
||||||
|
if frame := cli.stack[len(cli.stack)-1]; frame.key == "for" && frame.pos == m.Optioni("file_pos") {
|
||||||
|
if arg[1] == "index" {
|
||||||
|
frame.index++
|
||||||
|
if run = run && len(frame.list) > frame.index; run {
|
||||||
|
if len(arg) == 5 {
|
||||||
|
arg[3] = arg[4]
|
||||||
|
}
|
||||||
|
m.Cap(arg[3], frame.list[frame.index])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
frame.run = run
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
cli.stack = append(cli.stack, &Frame{pos: m.Optioni("file_pos"), key: key, run: run, index: 0})
|
cli.stack = append(cli.stack, &Frame{pos: m.Optioni("file_pos"), key: key, run: run, index: 0})
|
||||||
if m.Capi("level", 1); run && arg[1] == "index" {
|
if m.Capi("level", 1); run && arg[1] == "index" {
|
||||||
m.Cap(arg[4], arg[4], msg.Meta[arg[3]][0], "临时变量")
|
frame := cli.stack[len(cli.stack)-1]
|
||||||
}
|
switch len(arg) {
|
||||||
} // }}}
|
case 4:
|
||||||
}},
|
frame.list = []string{}
|
||||||
|
for k, _ := range msg.Meta {
|
||||||
|
frame.list = append(frame.list, k)
|
||||||
|
}
|
||||||
|
case 5:
|
||||||
|
frame.list = msg.Meta[arg[3]]
|
||||||
|
arg[3] = arg[4]
|
||||||
|
}
|
||||||
|
m.Cap(arg[3], arg[3], frame.list[0], "临时变量")
|
||||||
|
}
|
||||||
|
} // }}}
|
||||||
|
}},
|
||||||
"cmd": &ctx.Command{Name: "cmd word", Help: "", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
"cmd": &ctx.Command{Name: "cmd word", Help: "", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||||
if cli, ok := m.Target().Server.(*CLI); m.Assert(ok) { // {{{
|
if cli, ok := m.Target().Server.(*CLI); m.Assert(ok) { // {{{
|
||||||
detail := []string{}
|
detail := []string{}
|
||||||
|
@ -1987,6 +1987,10 @@ var Index = &Context{Name: "ctx", Help: "模块中心",
|
|||||||
// }}}
|
// }}}
|
||||||
}},
|
}},
|
||||||
"message": &Command{Name: "message [code] [all]|[cmd...]", Help: "查看消息", Hand: func(m *Message, c *Context, key string, arg ...string) {
|
"message": &Command{Name: "message [code] [all]|[cmd...]", Help: "查看消息", Hand: func(m *Message, c *Context, key string, arg ...string) {
|
||||||
|
if len(arg) > 0 && arg[0] == "spawn" {
|
||||||
|
m.Echo("%d", m.Spawn().code)
|
||||||
|
return
|
||||||
|
}
|
||||||
msg := m.Sess("cli", false) // {{{
|
msg := m.Sess("cli", false) // {{{
|
||||||
if len(arg) > 0 {
|
if len(arg) > 0 {
|
||||||
if code, e := strconv.Atoi(arg[0]); e == nil {
|
if code, e := strconv.Atoi(arg[0]); e == nil {
|
||||||
@ -2119,7 +2123,12 @@ var Index = &Context{Name: "ctx", Help: "模块中心",
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Echo("%s", msg.Option(arg[0], arg[1:]))
|
if len(arg) > 1 {
|
||||||
|
m.Echo("%s", msg.Option(arg[0], arg[1:]))
|
||||||
|
} else {
|
||||||
|
m.Echo("%s", msg.Option(arg[0]))
|
||||||
|
}
|
||||||
|
|
||||||
// }}}
|
// }}}
|
||||||
}},
|
}},
|
||||||
"result": &Command{Name: "result [value...]", Help: "查看或添加返回值", Hand: func(m *Message, c *Context, key string, arg ...string) {
|
"result": &Command{Name: "result [value...]", Help: "查看或添加返回值", Hand: func(m *Message, c *Context, key string, arg ...string) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user