package cangjie_lua.parser
import std.collection.*
// AST(抽象语法树)节点定义
// `Expr` 表示表达式,`Stmt` 表示语句,`BinaryOp` 表示二元运算符
/// 表达式节点
public enum Expr {
| IntLiteral(Int64) // Int64 字面量
| FloatLiteral(Float64) // Float64 字面量
| BoolLiteral(Bool) // Bool 字面量
| Variable(String) // 变量引用
| Binary(Box<Expr>, BinaryOp, Box<Expr>) // 二元运算:left op right
| Call(String, ArrayList<Expr>) // 函数调用:funcName(args...)
}
public class FuncParam {
public let name: String
public let typeName: String
public init(name: String, typeName: String) {
this.name = name
this.typeName = typeName
}
}
/// 语句节点
public enum Stmt {
| VarDecl(String, Bool, Expr) // 变量声明:let/var name = expr
| Assignment(String, Expr) // 赋值语句:name = expr
| IfStmt(Expr, ArrayList<Stmt>, ArrayList<Stmt>) // if (cond) { then } else { else }
| WhileStmt(Expr, ArrayList<Stmt>) // while (cond) { body }
| FuncDecl(String, ArrayList<FuncParam>, ?String, ArrayList<Stmt>) // func name(params:Type...):ReturnType { body }
| ReturnStmt(Expr) // return expr
| ExprStmt(Expr) // 表达式语句(如函数调用)
| Block(ArrayList<Stmt>) // 代码块 { stmts }
}
/// 二元运算符
public enum BinaryOp {
| ADD // +
| SUB // -
| MUL // *
| DIV // /
| EQ // ==
| NEQ // !=
| LT // <
| LTE // <=
| GT // >
| GTE // >=
}