Files
Fig/tests/Parser/parser_comprehensive_test.fig
PuqiAR 680197aafe Refactor: 重构Parser和AST结构,以支持新的语言特性
- 更新了 ParserTest,以改进文件路径处理和输出格式。
- 在 StmtParser 中新增了 parseConstDecl 和 parseForStmt 方法,用于处理常量声明和 for 循环。
- TypeExpr现归类为Expr。TypeExpr属于Expr,语义阶段视为Expr
- 添加了新的 AST 节点:PostfixExpr、TernaryExpr、ForStmt 和 ImportStmt,用于表示新的语法结构。
2026-06-06 22:12:04 +08:00

233 lines
6.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ==============================
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;
};