创建文件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())
}