initial commit [141.14.140.180,mike]
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
package main
|
||||
|
||||
// Node represents an AST node.
|
||||
type Node interface {
|
||||
isNode()
|
||||
}
|
||||
|
||||
type Expr interface {
|
||||
Node
|
||||
isExpr()
|
||||
}
|
||||
|
||||
// BinaryExpr represents a binary operation.
|
||||
type BinaryExpr struct {
|
||||
Op string
|
||||
Left Expr
|
||||
Right Expr
|
||||
}
|
||||
|
||||
func (e *BinaryExpr) isNode() {}
|
||||
func (e *BinaryExpr) isExpr() {}
|
||||
|
||||
// UnaryExpr represents a unary operation (+, -, ~).
|
||||
type UnaryExpr struct {
|
||||
Op string
|
||||
Expr Expr
|
||||
}
|
||||
|
||||
func (e *UnaryExpr) isNode() {}
|
||||
func (e *UnaryExpr) isExpr() {}
|
||||
|
||||
// NumberExpr represents a numeric literal.
|
||||
type NumberExpr struct {
|
||||
Value string // parsed as decimal later
|
||||
}
|
||||
|
||||
func (e *NumberExpr) isNode() {}
|
||||
func (e *NumberExpr) isExpr() {}
|
||||
|
||||
// IdentExpr represents an identifier (variable, unit, constant, or currency symbol).
|
||||
type IdentExpr struct {
|
||||
Name string
|
||||
}
|
||||
|
||||
func (e *IdentExpr) isNode() {}
|
||||
func (e *IdentExpr) isExpr() {}
|
||||
|
||||
// CallExpr represents a function call.
|
||||
type CallExpr struct {
|
||||
Func string
|
||||
Args []Expr
|
||||
}
|
||||
|
||||
func (e *CallExpr) isNode() {}
|
||||
func (e *CallExpr) isExpr() {}
|
||||
|
||||
// StringExpr represents a string literal.
|
||||
type StringExpr struct {
|
||||
Value string
|
||||
}
|
||||
|
||||
func (e *StringExpr) isNode() {}
|
||||
func (e *StringExpr) isExpr() {}
|
||||
Reference in New Issue
Block a user