/* ============================== Fig Parser Comprehensive Test ============================== */ // --- 单行注释 --- /* --- 多行注释 --- */ // ───────────────────────────────── // 1. 变量声明 var // ───────────────────────────────── var x; // Any, 无初始化 var a = 10; // 推断 Int var b: Int = 20; // 显式类型 var c := 30; // 类型推断锁定 var d: Int; // 显式类型,无初始化 var e = "hello"; // 推断 String var f = true; // 推断 Bool var g = null; // 推断 Null // ───────────────────────────────── // 2. 常量声明 const // ───────────────────────────────── const PI = 3.14159; // 推断 Double const MAX: Int = 100; // 显式类型 const NAME := "Fig"; // 类型推断锁定 const T: Double = 2.718; // 显式类型 // ───────────────────────────────── // 3. 函数定义 func // ───────────────────────────────── func noop() {} func add(a: Int, b: Int) -> Int { return a + b; } func greet(name: String) -> String { return "Hello " + name + "!"; } func quick(x) => x * 2; // 箭头简写 func noReturn() -> Null { return null; } // ───────────────────────────────── // 4. Lambda 表达式 // ───────────────────────────────── var lambda1 = func(x, y) => x + y; var lambda2 = func(x: Int) { return x * x; }; // ───────────────────────────────── // 5. 控制流 if / while / for // ───────────────────────────────── func testControlFlow() { // if-else if true { var z = 1; } if (x > 0) { var z = 2; } if a > 10 { return 1; } else if a > 5 { return 2; } else { return 3; } // while while a < 10 { a = a + 1; } while (a > 0) { a = a - 1; } // for (C风格,括号可选) for var i = 0; i < 10; i = i + 1 { var _ = i; } for (var j = 0; j < 5; j += 1) { var _ = j; } for ; ; { break; } // 无限循环 // break / continue while true { break; } while true { continue; } return 0; } // ───────────────────────────────── // 6. 表达式运算符 // ───────────────────────────────── func testOperators() -> Int { var r = 0; // 算术 r = 1 + 2; r = 3 - 1; r = 2 * 3; r = 6 / 2; r = 7 % 3; r = 2 ** 3; // 幂运算 // 比较 var b1 = 1 == 1; var b2 = 1 != 2; var b3 = 1 < 2; var b4 = 2 > 1; var b5 = 1 <= 1; var b6 = 2 >= 1; // 逻辑 var l1 = true and false; var l2 = true or false; var l3 = not true; var l4 = true && false; // && var l5 = true || false; // || // 复合赋值 r += 1; r -= 1; r *= 2; r /= 2; r %= 1; r ^= 1; // 位运算 var w1 = 1 & 2; var w2 = 1 | 2; var w3 = 1 ^ 2; var w4 = ~1; var w5 = 1 << 2; var w6 = 4 >> 1; // 前后缀 ++/-- var p = 0; var pre = ++p; var post = p--; var n = --p; // 前缀取反 var neg = -100; var notExpr = not true; // 三元 var t = a > 5 ? 1 : 0; // 成员访问 var m = someObj.field; // 类型检查 / 转换 var check = x is Int; var cast = x as String; // 索引 var idx = arr[0]; // 函数调用 var callRes = add(1, 2); // 分组 var grouped = (1 + 2) * 3; return r; } // ───────────────────────────────── // 7. struct 结构体 // ───────────────────────────────── struct Point { public x: Int; public y: Int; public func toString() -> String { return "(" + "x" + "," + "y" + ")"; } } struct Person { name: String; age: Int = 18; // 默认值 public func getName() -> String { return name; } } // ───────────────────────────────── // 8. new 表达式 // ───────────────────────────────── func testNewExpr() { var p1 = new Point{1, 2}; // 位置参数 var p2 = new Point{x: 2, y: 3}; // 命名参数 var xx = 114; var yy = 514; var p3 = new Point{yy, xx}; // 简写 var p4 = new Point{}; // 空构造 } // ───────────────────────────────── // 9. interface 接口 // ───────────────────────────────── interface Drawable { func draw() -> String; func getLayer() -> Int; } interface Printable { func toString() -> String; func getVersion() -> Int { return 1; } } // ───────────────────────────────── // 10. impl 实现 // ───────────────────────────────── struct Circle { public radius: Double; } impl Drawable for Circle { func draw() { return "circle"; } func getLayer() { return 0; } } // ───────────────────────────────── // 11. import 导入 // ───────────────────────────────── import std.io; import "path/to/file.fig"; // ───────────────────────────────── // 12. 闭包与嵌套函数 // ───────────────────────────────── func outer(x: Int) -> Function { func inner(n: Int) -> Int { return n * x; } return inner; } var closureMaker = func(factor: Int) { return func(n) => n * factor; };