Documentation
¶
Index ¶
- func AddSub(p *ast.Parser) (*ast.Node, error)
- func Evaluate(s string) (int, error)
- func EvaluateNode(n *ast.Node) int
- func Factor(p *ast.Parser) (*ast.Node, error)
- func Integer(p *ast.Parser) (*ast.Node, error)
- func MulDiv(p *ast.Parser) (*ast.Node, error)
- func Parse(s string) (*ast.Node, error)
- func Space(p *ast.Parser) (*ast.Node, error)
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Evaluate ¶
Example ¶
package main
import (
"fmt"
calc "github.com/di-wu/parser/examples/calculator/ast"
)
func main() {
fmt.Println(calc.Evaluate("1 + 1"))
fmt.Println(calc.Evaluate("1 + 1 * 1"))
fmt.Println(calc.Evaluate("1 + 1 * 1 + 1"))
fmt.Println(calc.Evaluate("1 + 1 * (1 + 1)"))
fmt.Println(calc.Evaluate("(1 + 1) * (1 + 1)"))
}
Output: 2 <nil> 2 <nil> 3 <nil> 3 <nil> 4 <nil>
func EvaluateNode ¶
func Integer ¶
Example ¶
package main
import (
"fmt"
"github.com/di-wu/parser/ast"
calc "github.com/di-wu/parser/examples/calculator/ast"
)
func main() {
p := func(s string) *ast.Parser {
p, _ := ast.New([]byte(s))
return p
}
fmt.Println(p("007").Expect(calc.Integer))
fmt.Println(p("007").Expect(calc.Factor))
fmt.Println(p("007").Expect(calc.MulDiv))
fmt.Println(p("007").Expect(calc.AddSub))
}
Output: ["Integer","007"] <nil> ["Integer","007"] <nil> ["MulDivExpr",[["Integer","007"]]] <nil> ["AddSubExpr",[["MulDivExpr",[["Integer","007"]]]]] <nil>
func Parse ¶
Example ¶
package main
import (
"fmt"
calc "github.com/di-wu/parser/examples/calculator/ast"
)
func main() {
fmt.Println(calc.Parse("1 + 1"))
fmt.Println(calc.Parse("1 + 1 * 1"))
fmt.Println(calc.Parse("1 + 1 * 1 + 1"))
fmt.Println(calc.Parse("1 + 1 * (1 + 1)"))
fmt.Println(calc.Parse("(1 + 1) * (1 + 1)"))
}
Output: ["AddSubExpr",[["MulDivExpr",[["Integer","1"]]],["AddSub","+"],["MulDivExpr",[["Integer","1"]]]]] <nil> ["AddSubExpr",[["MulDivExpr",[["Integer","1"]]],["AddSub","+"],["MulDivExpr",[["Integer","1"],["MulDiv","*"],["Integer","1"]]]]] <nil> ["AddSubExpr",[["MulDivExpr",[["Integer","1"]]],["AddSub","+"],["MulDivExpr",[["Integer","1"],["MulDiv","*"],["Integer","1"]]],["AddSub","+"],["MulDivExpr",[["Integer","1"]]]]] <nil> ["AddSubExpr",[["MulDivExpr",[["Integer","1"]]],["AddSub","+"],["MulDivExpr",[["Integer","1"],["MulDiv","*"],["AddSubExpr",[["MulDivExpr",[["Integer","1"]]],["AddSub","+"],["MulDivExpr",[["Integer","1"]]]]]]]]] <nil> ["AddSubExpr",[["MulDivExpr",[["AddSubExpr",[["MulDivExpr",[["Integer","1"]]],["AddSub","+"],["MulDivExpr",[["Integer","1"]]]]],["MulDiv","*"],["AddSubExpr",[["MulDivExpr",[["Integer","1"]]],["AddSub","+"],["MulDivExpr",[["Integer","1"]]]]]]]]] <nil>
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.