Repository URL to install this package:
|
Version:
1.5.2-1 ▾
|
import (
"encoding/json"
"os"
"xgo/tpl"
"xgo/tpl/token"
)
type Expr any
type UnaryExpr struct {
OpPos token.Pos
Op token.Token
X Expr
}
type BinaryExpr struct {
X Expr
OpPos token.Pos
Op token.Token
Y Expr
}
type BasicLit struct {
ValuePos token.Pos
Kind token.Token
Value string
}
cl := tpl`
expr = operand % ("*" | "/") % ("+" | "-") => {
return tpl.binaryOp(true, self, (op, x, y) => {
return &BinaryExpr{
X: x,
OpPos: op.Pos,
Op: op.Tok,
Y: y,
}
})
}
operand = basicLit | unaryExpr
unaryExpr = "-" operand => {
op := self[0].(*tpl.Token)
return &UnaryExpr{
OpPos: op.Pos,
Op: op.Tok,
X: self[1],
}
}
basicLit = INT | FLOAT => {
op := self.(*tpl.Token)
return &BasicLit{
ValuePos: op.Pos,
Kind: op.Tok,
Value: op.Lit,
}
}
`!
print "> "
for line in os.Stdin {
e, err := cl.parseExpr(line, nil)
if err != nil {
print err, "\n> "
} else {
print string(json.marshalIndent(e, "", " ")!), "\n> "
}
}