创建文件Node.go
package interpreter type Node interface { Interpreter() int } type ValNode struct { val int } func (v *ValNode) Interpreter() int { return v.val }
创建AddNode.go
package interpreter type AddNode struct { left, right Node } func (a *AddNode) Interpreter() int { return a.left.Interpreter() + a.right.Interpreter() }
创建SubNode.go
package interpreter type SubNode struct { left, right Node } func (s *SubNode) Interpreter() int { return s.left.Interpreter() - s.right.Interpreter() }
创建Parser.go
package interpreter import ( "strconv" "strings" ) type Parser struct { exp []string index int prev Node } func (p *Parser) Parser(exp string) { p.exp = strings.Split(exp, " ") for { if p.index >= len(p.exp) { return } switch p.exp[p.index] { case "+": p.prev = p.newAddNode() case "-": p.prev = p.newSubNode() default: p.prev = p.newValNode() } } } func (p *Parser) newAddNode() Node { p.index++ return &AddNode{left: p.prev, right: p.newValNode()} } func (p *Parser) newSubNode() Node { p.index++ return &SubNode{left: p.prev, right: p.newValNode()} } func (p *Parser) newValNode() Node { v, _ := strconv.Atoi(p.exp[p.index]) // 转换类型 p.index++ return &ValNode{v} } func (p *Parser) Result() Node { return p.prev }
main.go
package main import ( "fmt" "ssp_api_go/test/design/interpreter" ) func main() { p := &interpreter.Parser{} p.Parser("1 + 3 - 2") fmt.Println(p.Result().Interpreter()) }