tsl-devkit/lsp-server/test/tree_sitter_tsf/examples/test_tsf.sh

1790 lines
60 KiB
Bash
Raw Permalink 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.

#!/bin/bash
# test_tsf.sh - TSF 语法综合测试
echo "=== TSF 基础语法验证 ==="
echo "步骤1: 生成解析器"
tree-sitter generate
if [ $? -ne 0 ]; then
echo "❌ 生成解析器失败"
exit 1
fi
echo -e "\n步骤2: 测试最简单的完整结构"
echo "2.1 测试简单函数声明"
echo 'function test(); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 简单函数声明解析正常"
else
echo " ❌ 简单函数声明解析失败"
echo " 详细错误:"
echo 'function test(); begin end;' | tree-sitter parse
fi
echo "2.2 测试带参数的函数(逗号分隔)"
echo 'function test(a, b); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 带参数函数(逗号)解析正常"
else
echo " ❌ 带参数函数(逗号)解析失败"
echo " 详细错误:"
echo 'function test(a, b); begin end;' | tree-sitter parse
fi
echo "2.3 测试参数分隔符规则对比"
echo " 2.3a 简单参数用逗号:"
echo 'function test(a, b, c); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 逗号分隔正常"
else
echo " ❌ 逗号分隔失败"
fi
echo " 2.3b 有类型用分号:"
echo 'function test(a: real; b: string); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 分号分隔正常"
else
echo " ❌ 分号分隔失败"
fi
echo -e "\n步骤3: 测试函数体内容"
echo "3.1 测试end后有分号"
echo 'function test(); begin x := 1; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ end后有分号解析正常"
else
echo " ❌ end后有分号解析失败"
echo " 详细错误:"
echo 'function test(); begin x := 1; end;' | tree-sitter parse
fi
echo "3.2 测试end后无分号"
echo 'function test(); begin x := 1; end' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ end后无分号解析正常"
else
echo " ❌ end后无分号解析失败"
echo " 详细错误:"
echo 'function test(); begin x := 1; end' | tree-sitter parse
fi
echo "3.3 测试简单赋值"
echo 'function test(); begin x := 1; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 简单赋值解析正常"
else
echo " ❌ 简单赋值解析失败"
echo " 详细错误:"
echo 'function test(); begin x := 1; end;' | tree-sitter parse
fi
echo "3.4 测试字符串赋值"
echo 'function test(); begin x := "hello"; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 字符串赋值解析正常"
else
echo " ❌ 字符串赋值解析失败"
echo " 详细错误:"
echo 'function test(); begin x := "hello"; end;' | tree-sitter parse
fi
echo -e "\n步骤4: 测试类型注解"
echo "4.1 测试基础类型"
echo 'function test(x: real); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 基础类型注解解析正常"
else
echo " ❌ 基础类型注解解析失败"
echo " 详细错误:"
echo 'function test(x: real); begin end;' | tree-sitter parse
fi
echo "4.2 测试多个参数都有类型"
echo 'function test(x: real; y: string; z: integer); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 多个类型注解解析正常"
else
echo " ❌ 多个类型注解解析失败"
echo " 详细错误:"
echo 'function test(x: real; y: string; z: integer); begin end;' | tree-sitter parse
fi
echo "4.3 测试混合类型和无类型参数(用分号)"
echo 'function test(a; b: real; c; d: string); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 混合参数类型解析正常"
else
echo " ❌ 混合参数类型解析失败"
echo " 详细错误:"
echo 'function test(a; b: real; c; d: string); begin end;' | tree-sitter parse
fi
echo "4.4 测试复杂类型"
echo 'function test(x: array of string); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 复杂类型注解解析正常"
else
echo " ❌ 复杂类型注解解析失败"
echo " 详细错误:"
echo 'function test(x: array of string); begin end;' | tree-sitter parse
fi
echo "4.5 测试自定义类型"
echo 'function test(x: abc.def); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 自定义类型注解解析正常"
else
echo " ❌ 自定义类型注解解析失败"
echo " 详细错误:"
echo 'function test(x: abc.def); begin end;' | tree-sitter parse
fi
echo "4.6 测试复杂类型组合"
echo 'function test(items: array of MyType; callback: CallbackType; data: MyCustomType); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 复杂类型组合解析正常"
else
echo " ❌ 复杂类型组合解析失败"
echo " 详细错误:"
echo 'function test(items: array of MyType; callback: CallbackType; data: MyCustomType); begin end;' | tree-sitter parse
fi
echo -e "\n步骤5: 测试默认值"
echo "5.1 测试数字默认值"
echo 'function test(x: real = 1.0); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 数字默认值解析正常"
else
echo " ❌ 数字默认值解析失败"
echo " 详细错误:"
echo 'function test(x: real = 1.0); begin end;' | tree-sitter parse
fi
echo "5.2 测试字符串默认值"
echo 'function test(x: string = "hello"); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 字符串默认值解析正常"
else
echo " ❌ 字符串默认值解析失败"
echo " 详细错误:"
echo 'function test(x: string = "hello"); begin end;' | tree-sitter parse
fi
echo "5.3 测试qualified identifier默认值"
echo 'function test(x: MyType = abc.def); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ qualified identifier默认值解析正常"
else
echo " ❌ qualified identifier默认值解析失败"
echo " 详细错误:"
echo 'function test(x: MyType = abc.def); begin end;' | tree-sitter parse
fi
echo "5.4 测试多个参数都有默认值"
echo 'function test(x: real = 1.0; y: string = "hello"; z: integer = 42); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 多个默认值解析正常"
else
echo " ❌ 多个默认值解析失败"
echo " 详细错误:"
echo 'function test(x: real = 1.0; y: string = "hello"; z: integer = 42); begin end;' | tree-sitter parse
fi
echo "5.5 测试混合有默认值和无默认值"
echo 'function test(a: real; b: string = "default"; c: integer; d: boolean = true); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 混合默认值解析正常"
else
echo " ❌ 混合默认值解析失败"
echo " 详细错误:"
echo 'function test(a: real; b: string = "default"; c: integer; d: boolean = true); begin end;' | tree-sitter parse
fi
echo "5.6 测试无类型但有默认值"
echo 'function test(a = 1.0; b = "hello"); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 无类型默认值解析正常"
else
echo " ❌ 无类型默认值解析失败"
echo " 详细错误:"
echo 'function test(a = 1.0; b = "hello"); begin end;' | tree-sitter parse
fi
echo "5.7 测试复杂混合参数"
echo 'function test(a; b: real; c = "default"; d: array of string = "item1"; e: MyType); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 复杂混合参数解析正常"
else
echo " ❌ 复杂混合参数解析失败"
echo " 详细错误:"
echo 'function test(a; b: real; c = "default"; d: array of string = "item1"; e: MyType); begin end;' | tree-sitter parse
fi
echo -e "\n步骤6: 测试注释"
echo "6.1 测试单行注释"
echo '// 这是注释
function test(); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 单行注释解析正常"
else
echo " ❌ 单行注释解析失败"
echo " 详细错误:"
echo '// 这是注释
function test(); begin end;' | tree-sitter parse
fi
echo "6.2 测试行末注释"
echo 'function test(); begin x := 1; // 赋值
end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 行末注释解析正常"
else
echo " ❌ 行末注释解析失败"
echo " 详细错误:"
echo 'function test(); begin x := 1; // 赋值
end;' | tree-sitter parse
fi
echo "6.3 测试块注释1"
echo '{ 这是块注释 }
function test(); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 块注释1解析正常"
else
echo " ❌ 块注释1解析失败"
fi
echo "6.4 测试块注释2"
echo '(* 这是块注释2 *)
function test(); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 块注释2解析正常"
else
echo " ❌ 块注释2解析失败"
fi
echo -e "\n步骤7: 测试数组构造(重点新增)"
echo "7.1 测试基础数组"
echo 'function test(); begin arr := array(1, 2, 3); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 基础数组解析正常"
else
echo " ❌ 基础数组解析失败"
echo " 详细错误:"
echo 'function test(); begin arr := array(1, 2, 3); end;' | tree-sitter parse
fi
echo "7.2 测试混合类型数组"
echo 'function test(); begin arr := array(1, "abc", true, nil); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 混合类型数组解析正常"
else
echo " ❌ 混合类型数组解析失败"
echo " 详细错误:"
echo 'function test(); begin arr := array(1, "abc", true, nil); end;' | tree-sitter parse
fi
echo "7.3 测试键值对数组"
echo 'function test(); begin arr := array("key1": "value1", "key2": "value2"); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 键值对数组解析正常"
else
echo " ❌ 键值对数组解析失败"
echo " 详细错误:"
echo 'function test(); begin arr := array("key1": "value1", "key2": "value2"); end;' | tree-sitter parse
fi
echo "7.4 测试元组数组"
echo 'function test(); begin arr := array((1, "a"), (2, "b")); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 元组数组解析正常"
else
echo " ❌ 元组数组解析失败"
echo " 详细错误:"
echo 'function test(); begin arr := array((1, "a"), (2, "b")); end;' | tree-sitter parse
fi
echo "7.5 测试嵌套数组"
echo 'function test(); begin arr := array(array(1, 2), array(3, 4)); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 嵌套数组解析正常"
else
echo " ❌ 嵌套数组解析失败"
echo " 详细错误:"
echo 'function test(); begin arr := array(array(1, 2), array(3, 4)); end;' | tree-sitter parse
fi
echo "7.6 测试深层嵌套数组"
echo 'function test(); begin arr := array(array(array(1, 2), array(3, 4)), array(array(5, 6), array(7, 8))); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 深层嵌套数组解析正常"
else
echo " ❌ 深层嵌套数组解析失败"
echo " 详细错误:"
echo 'function test(); begin arr := array(array(array(1, 2), array(3, 4)), array(array(5, 6), array(7, 8))); end;' | tree-sitter parse
fi
echo "7.7 测试混合键值对和元组"
echo 'function test(); begin arr := array(("key1": array(1, 2, 3)), ("key2": (4, 5, 6))); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 混合键值对和元组解析正常"
else
echo " ❌ 混合键值对和元组解析失败"
echo " 详细错误:"
echo 'function test(); begin arr := array(("key1": array(1, 2, 3)), ("key2": (4, 5, 6))); end;' | tree-sitter parse
fi
echo "7.8 测试复杂嵌套键值对"
echo 'function test(); begin arr := array("outer": array("inner1": 1, "inner2": 2), "data": array(1, 2, 3)); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 复杂嵌套键值对解析正常"
else
echo " ❌ 复杂嵌套键值对解析失败"
echo " 详细错误:"
echo 'function test(); begin arr := array("outer": array("inner1": 1, "inner2": 2), "data": array(1, 2, 3)); end;' | tree-sitter parse
fi
echo "7.9 测试元组内嵌套数组"
echo 'function test(); begin arr := array((array(1, 2), array("a", "b")), (array(3, 4), array("c", "d"))); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 元组内嵌套数组解析正常"
else
echo " ❌ 元组内嵌套数组解析失败"
echo " 详细错误:"
echo 'function test(); begin arr := array((array(1, 2), array("a", "b")), (array(3, 4), array("c", "d"))); end;' | tree-sitter parse
fi
echo "7.10 测试复杂混合结构"
echo 'function test(); begin arr := array("data": array((1, "first"), (2, "second")), "meta": array("count": 2, "type": "test")); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 复杂混合结构解析正常"
else
echo " ❌ 复杂混合结构解析失败"
echo " 详细错误:"
echo 'function test(); begin arr := array("data": array((1, "first"), (2, "second")), "meta": array("count": 2, "type": "test")); end;' | tree-sitter parse
fi
echo "7.11 测试空数组"
echo 'function test(); begin arr := array(); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 空数组解析正常"
else
echo " ❌ 空数组解析失败"
echo " 详细错误:"
echo 'function test(); begin arr := array(); end;' | tree-sitter parse
fi
echo "7.12 测试变量作为数组元素"
echo 'function test(); begin arr := array(var1, var2, array(var3, var4)); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 变量作为数组元素解析正常"
else
echo " ❌ 变量作为数组元素解析失败"
echo " 详细错误:"
echo 'function test(); begin arr := array(var1, var2, array(var3, var4)); end;' | tree-sitter parse
fi
echo "7.13 测试函数调用作为数组元素"
echo 'function test(); begin arr := array(func1(), func2(arg), array(func3(), func4(arg1, arg2))); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 函数调用作为数组元素解析正常"
else
echo " ❌ 函数调用作为数组元素解析失败"
echo " 详细错误:"
echo 'function test(); begin arr := array(func1(), func2(arg), array(func3(), func4(arg1, arg2))); end;' | tree-sitter parse
fi
echo "7.14 测试括号表达式在array中的语义单元素数组"
echo 'function test(); begin arr := array(func(), (a + b)); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 函数调用+括号表达式解析正常"
echo " 📝 语义array(ret1, (c)) - (a+b)在array中被视为单元素数组"
else
echo " ❌ 函数调用+括号表达式解析失败"
echo " 详细错误:"
echo 'function test(); begin arr := array(func(), (a + b)); end;' | tree-sitter parse
fi
echo "7.15 测试括号在array中的不同语义"
echo 'function test(); begin arr := array((x + y), z, (a * b)); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 多个括号表达式解析正常"
echo " 📝 语义:每个(expr)在array中都是单元素数组"
else
echo " ❌ 多个括号表达式解析失败"
echo " 详细错误:"
echo 'function test(); begin arr := array((x + y), z, (a * b)); end;' | tree-sitter parse
fi
echo "7.16 测试混合函数调用、变量和括号表达式"
echo 'function test(); begin arr := array(func(), (a + b), var1, (c * d)); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 混合类型解析正常"
echo " 📝 语义array(ret1, (result1), var1, (result2))"
else
echo " ❌ 混合类型解析失败"
echo " 详细错误:"
echo 'function test(); begin arr := array(func(), (a + b), var1, (c * d)); end;' | tree-sitter parse
fi
echo "7.17 测试元组vs单元素数组的区别"
echo 'function test(); begin arr := array((a, b, c), (x + y), ("key": "value")); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 元组vs单元素数组解析正常"
echo " 📝 语义:(a,b,c)是元组,(x+y)是单元素数组,第三个是键值对"
else
echo " ❌ 元组vs单元素数组解析失败"
echo " 详细错误:"
echo 'function test(); begin arr := array((a, b, c), (x + y), ("key": "value")); end;' | tree-sitter parse
fi
echo "7.18 测试复杂混合:函数、表达式、元组、键值对"
echo 'function test(); begin arr := array(1, func(), (expr), (a, b), "key": (value)); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 复杂混合解析正常"
echo " 📝 包含:字面量、函数调用、单元素数组、元组、键值对"
else
echo " ❌ 复杂混合解析失败"
echo " 详细错误:"
echo 'function test(); begin arr := array(1, func(), (expr), (a, b), "key": (value)); end;' | tree-sitter parse
fi
echo -e "\n步骤8: 测试数字格式"
echo "8.1 测试基础数字"
echo 'function test(); begin x := 123; y := 123.456; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 基础数字解析正常"
else
echo " ❌ 基础数字解析失败"
fi
echo "8.2 测试科学记数法"
echo 'function test(); begin x := 1E2; y := -3.4e34; z := 2.4e-23; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 科学记数法解析正常"
else
echo " ❌ 科学记数法解析失败"
fi
echo "8.3 测试不同进制"
echo 'function test(); begin x := 0x1A; y := 0b100; z := 0o64; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 不同进制解析正常"
else
echo " ❌ 不同进制解析失败"
fi
echo "8.4 测试特殊字面量"
echo 'function test(); begin x := nil; y := -INF; z := +INF; w := NAN; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 特殊字面量解析正常"
else
echo " ❌ 特殊字面量解析失败"
fi
echo -e "\n步骤9: 测试运算符"
echo "9.1 测试基础算术运算符"
echo 'function test(); begin x := a + b * c / d - e % f; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 基础算术运算符解析正常"
else
echo " ❌ 基础算术运算符解析失败"
fi
echo "9.2 测试特殊运算符"
echo 'function test(); begin x := a mod b; y := a div b; z := a ^ b; w := a ~ b; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 特殊运算符解析正常"
else
echo " ❌ 特殊运算符解析失败"
fi
echo "9.3 测试逻辑运算符"
echo 'function test(); begin x := a .&& b; y := a .|| b; z := .!! a; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 逻辑运算符解析正常"
else
echo " ❌ 逻辑运算符解析失败"
fi
echo "9.4 测试位运算符"
echo 'function test(); begin x := a .& b; y := a .| b; z := .! a; w := a .^ b; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 位运算符解析正常"
else
echo " ❌ 位运算符解析失败"
fi
echo "9.5 测试位移运算符"
echo 'function test(); begin x := a shl 2; y := a shr 3; z := a rol 1; w := a ror 4; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 位移运算符解析正常"
else
echo " ❌ 位移运算符解析失败"
fi
echo "9.6 测试自增自减"
echo 'function test(); begin ++a; ++b; --c; --d; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 前缀自增自减解析正常"
else
echo " ❌ 前缀自增自减解析失败"
fi
echo "9.7 测试后缀自增自减(作为表达式语句)"
echo 'function test(); begin a++; b++; c--; d--; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 后缀自增自减(表达式语句)解析正常"
else
echo " ❌ 后缀自增自减(表达式语句)解析失败"
echo " 详细错误:"
echo 'function test(); begin a++; b++; c--; d--; end;' | tree-sitter parse
fi
echo "9.8 测试复合赋值"
echo 'function test(); begin a += 1; b -= 2; c *= 3; d /= 4; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 复合赋值解析正常"
else
echo " ❌ 复合赋值解析失败"
fi
echo -e "\n步骤10: 测试三元表达式"
echo "10.1 测试基础三元表达式"
echo 'function test(); begin result := a > b ? a : b; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 基础三元表达式解析正常"
else
echo " ❌ 基础三元表达式解析失败"
echo " 详细错误:"
echo 'function test(); begin result := a > b ? a : b; end;' | tree-sitter parse
fi
echo "10.2 测试嵌套三元表达式"
echo 'function test(); begin result := a > 0 ? (b > 0 ? "positive" : "zero") : "negative"; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 嵌套三元表达式解析正常"
else
echo " ❌ 嵌套三元表达式解析失败"
echo " 详细错误:"
echo 'function test(); begin result := a > 0 ? (b > 0 ? "positive" : "zero") : "negative"; end;' | tree-sitter parse
fi
echo "10.3 测试三元表达式链"
echo 'function test(); begin grade := score >= 90 ? "A" : score >= 80 ? "B" : score >= 70 ? "C" : "F"; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 三元表达式链解析正常"
else
echo " ❌ 三元表达式链解析失败"
fi
echo -e "\n步骤11: 测试数组索引和切片"
echo "11.1 测试数组索引访问"
echo 'function test(); begin item := arr[0]; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 数组索引访问解析正常"
else
echo " ❌ 数组索引访问解析失败"
echo " 详细错误:"
echo 'function test(); begin item := arr[0]; end;' | tree-sitter parse
fi
echo "11.2 测试多维数组访问"
echo 'function test(); begin item := matrix[i][j]; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 多维数组访问解析正常"
else
echo " ❌ 多维数组访问解析失败"
echo " 详细错误:"
echo 'function test(); begin item := matrix[i][j]; end;' | tree-sitter parse
fi
echo "11.3 测试数组切片"
echo 'function test(); begin slice := arr[1:5]; part := arr[:3]; tail := arr[2:]; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 数组切片解析正常"
else
echo " ❌ 数组切片解析失败"
echo " 详细错误:"
echo 'function test(); begin slice := arr[1:5]; part := arr[:3]; tail := arr[2:]; end;' | tree-sitter parse
fi
echo "11.4 测试复合数组访问"
echo 'function test(); begin item := obj.data[index]; value := func().result[0]; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 复合数组访问解析正常"
else
echo " ❌ 复合数组访问解析失败"
echo " 详细错误:"
echo 'function test(); begin item := obj.data[index]; value := func().result[0]; end;' | tree-sitter parse
fi
echo "11.5 测试数组赋值"
echo 'function test(); begin arr[index] := value; matrix[i][j] := data; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 数组赋值解析正常"
else
echo " ❌ 数组赋值解析失败"
echo " 详细错误:"
echo 'function test(); begin arr[index] := value; matrix[i][j] := data; end;' | tree-sitter parse
fi
echo -e "\n步骤12: 测试控制流"
echo "12.1 测试if语句"
echo 'function test(); begin if a > b then x := a; else x := b; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ if语句解析正常"
else
echo " ❌ if语句解析失败"
fi
echo "12.2 测试复杂if语句"
cat > temp_if_test.tsf << 'EOF'
function test();
begin
if a > 0 then
begin
x := a;
end
else if a < 0 then
begin
x := -a;
end
else begin
x := 0;
end;
end
EOF
tree-sitter parse temp_if_test.tsf > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 复杂if语句解析正常"
else
echo " ❌ 复杂if语句解析失败"
fi
echo "12.3 测试case语句"
cat > temp_case_test.tsf << 'EOF'
function test();
begin
case age of
10: result := "ten";
11,12: begin
result := "eleven or twelve";
end
else
result := "other";
end;
end
EOF
tree-sitter parse temp_case_test.tsf > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ case语句解析正常"
else
echo " ❌ case语句解析失败"
fi
echo "12.4 测试for循环"
echo 'function test(); begin for k,v in arr do x := v; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ for循环解析正常"
else
echo " ❌ for循环解析失败"
fi
echo "12.5 测试for...to循环"
echo 'function test(); begin for i:=0 to 10 do x := i; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ for...to循环解析正常"
else
echo " ❌ for...to循环解析失败"
fi
echo "12.6 测试while循环"
echo 'function test(); begin while x > 0 do x := x - 1; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ while循环解析正常"
else
echo " ❌ while循环解析失败"
fi
echo "12.7 测试repeat循环"
echo 'function test(); begin repeat x := x + 1; until x > 10; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ repeat循环解析正常"
else
echo " ❌ repeat循环解析失败"
fi
echo -e "\n步骤13: 测试特殊查询语法"
echo "13.1 测试vselect查询"
echo "function test(); begin ret := vselect maxof(['refs']) from v end; end;" | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ vselect查询解析正常"
else
echo " ❌ vselect查询解析失败"
echo " 详细错误:"
echo "function test(); begin ret := vselect maxof(['refs']) from v end; end;" | tree-sitter parse
fi
echo "13.2 测试select查询"
echo "function test(); begin data := select sumof(['amount']) from table end; end;" | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ select查询解析正常"
else
echo " ❌ select查询解析失败"
fi
echo "13.3 测试sselect查询"
echo "function test(); begin result := sselect minof(['price']) from source end; end;" | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ sselect查询解析正常"
else
echo " ❌ sselect查询解析失败"
fi
echo "13.4 测试聚合函数变体"
echo "function test(); begin result := vselect countof(['id']) from data end; end;" | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 聚合函数变体解析正常"
else
echo " ❌ 聚合函数变体解析失败"
fi
echo -e "\n步骤14: 测试类语法"
echo "14.1 测试最简单的类声明"
echo 'type Base = class end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 简单类声明解析正常"
else
echo " ❌ 简单类声明解析失败"
echo " 详细错误:"
echo 'type Base = class end;' | tree-sitter parse
fi
echo "14.2 测试带继承的类声明"
echo 'type Child = class(Base) end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 继承类声明解析正常"
else
echo " ❌ 继承类声明解析失败"
echo " 详细错误:"
echo 'type Child = class(Base) end;' | tree-sitter parse
fi
echo "14.3 测试访问修饰符"
cat > temp_class_access.tsf << 'EOF'
type TestClass = class
public
member1;
private
member2: string;
protected
member3: integer;
end;
EOF
tree-sitter parse temp_class_access.tsf > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 访问修饰符解析正常"
else
echo " ❌ 访问修饰符解析失败"
echo " 详细错误:"
tree-sitter parse temp_class_access.tsf
fi
echo "14.4 测试成员变量标签"
cat > temp_class_tags.tsf << 'EOF'
type TestClass = class
public
normal_member;
typed_member: string;
[weakref]weak_member;
[weakref]weak_typed: obj;
end;
EOF
tree-sitter parse temp_class_tags.tsf > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 成员变量标签解析正常"
else
echo " ❌ 成员变量标签解析失败"
echo " 详细错误:"
tree-sitter parse temp_class_tags.tsf
fi
echo "14.5 测试方法声明(类内实现)"
cat > temp_class_methods.tsf << 'EOF'
type TestClass = class
public
function Create();
begin
member := 123;
end
function Destroy();
begin
end
function func1();
begin
result := member;
end
private
member: integer;
end;
EOF
tree-sitter parse temp_class_methods.tsf > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 类内方法实现解析正常"
else
echo " ❌ 类内方法实现解析失败"
echo " 详细错误:"
tree-sitter parse temp_class_methods.tsf
fi
echo "14.6 测试方法修饰符"
cat > temp_class_modifiers.tsf << 'EOF'
type TestClass = class
public
function vfunc();virtual;
function ofunc();overload;
function ofunc(a);overload;
end;
EOF
tree-sitter parse temp_class_modifiers.tsf > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 方法修饰符解析正常"
else
echo " ❌ 方法修饰符解析失败"
echo " 详细错误:"
tree-sitter parse temp_class_modifiers.tsf
fi
echo "14.7 测试类外方法实现"
cat > temp_class_external.tsf << 'EOF'
type TestClass = class
public
function Create();
function Process(data: string);virtual;
end;
function TestClass.Create();
begin
member := 0;
end;
function TestClass.Process(data: string);virtual;
begin
result := data;
end;
EOF
tree-sitter parse temp_class_external.tsf > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 类外方法实现解析正常"
else
echo " ❌ 类外方法实现解析失败"
echo " 详细错误:"
tree-sitter parse temp_class_external.tsf
fi
echo -e "\n步骤15: 测试对象创建和成员访问"
echo "15.1 测试new创建对象"
echo 'function test(); begin obj := new MyClass(); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ new创建对象解析正常"
else
echo " ❌ new创建对象解析失败"
echo " 详细错误:"
echo 'function test(); begin obj := new MyClass(); end;' | tree-sitter parse
fi
echo "15.2 测试带参数的new"
echo 'function test(); begin obj := new MyClass(param1, param2); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 带参数new解析正常"
else
echo " ❌ 带参数new解析失败"
echo " 详细错误:"
echo 'function test(); begin obj := new MyClass(param1, param2); end;' | tree-sitter parse
fi
echo "15.3 测试成员访问"
echo 'function test(); begin x := obj.property; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 成员访问解析正常"
else
echo " ❌ 成员访问解析失败"
echo " 详细错误:"
echo 'function test(); begin x := obj.property; end;' | tree-sitter parse
fi
echo "15.4 测试成员赋值"
echo 'function test(); begin obj.property := 123; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 成员赋值解析正常"
else
echo " ❌ 成员赋值解析失败"
echo " 详细错误:"
echo 'function test(); begin obj.property := 123; end;' | tree-sitter parse
fi
echo "15.5 测试方法调用"
echo 'function test(); begin obj.method(); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 方法调用解析正常"
else
echo " ❌ 方法调用解析失败"
echo " 详细错误:"
echo 'function test(); begin obj.method(); end;' | tree-sitter parse
fi
echo "15.6 测试链式调用"
echo 'function test(); begin result := obj.method1().method2(); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 链式调用解析正常"
else
echo " ❌ 链式调用解析失败"
echo " 详细错误:"
echo 'function test(); begin result := obj.method1().method2(); end;' | tree-sitter parse
fi
echo "15.7 测试成员自增"
echo 'function test(); begin obj.count++; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 成员自增解析正常"
else
echo " ❌ 成员自增解析失败"
echo " 详细错误:"
echo 'function test(); begin obj.count++; end;' | tree-sitter parse
fi
echo "15.8 测试成员复合赋值"
echo 'function test(); begin obj.value += 10; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 成员复合赋值解析正常"
else
echo " ❌ 成员复合赋值解析失败"
echo " 详细错误:"
echo 'function test(); begin obj.value += 10; end;' | tree-sitter parse
fi
echo -e "\n步骤16: 测试Unit模块特性"
echo "16.1 测试最简单的Unit"
cat > temp_unit_simple.tsf << 'EOF'
unit TestUnit;
interface
implementation
end.
EOF
tree-sitter parse temp_unit_simple.tsf > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 最简单Unit解析正常"
else
echo " ❌ 最简单Unit解析失败"
echo " 详细错误:"
tree-sitter parse temp_unit_simple.tsf
fi
echo "16.2 测试带成员的Unit"
cat > temp_unit_members.tsf << 'EOF'
unit TestUnit;
interface
var x, y;
const MAX = 100;
function process();
implementation
var z;
function process();
begin
x := MAX;
end;
end.
EOF
tree-sitter parse temp_unit_members.tsf > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 带成员Unit解析正常"
else
echo " ❌ 带成员Unit解析失败"
echo " 详细错误:"
tree-sitter parse temp_unit_members.tsf
fi
echo "16.3 测试完整Unit"
cat > temp_unit_complete.tsf << 'EOF'
unit DeMo_Unit_Test01;
interface
var Ua, Ub;
const CS = 888;
function addv();
function NumbJO(v);
function print();
implementation
const CN = array("奇数", "偶数");
var Uc;
function print();
begin
echo "当前值-Ua:", Ua, " Ub:", Ub, " Uc:", Uc, " CS:", CS;
end
function addv();
begin
Ua += 10;
Uc += 1;
end;
function NumbJO(v);
begin
if (v mod 2) = 0 then
echo v, "是一个", CN[1];
else
echo v, "是一个", CN[0];
end;
initialization
Ua := 100;
Ub := "Tinysoft Unit";
Uc := 1;
finalization
echo "DeMo_Unit_Test01 End.";
end.
EOF
tree-sitter parse temp_unit_complete.tsf > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 完整Unit解析正常"
else
echo " ❌ 完整Unit解析失败"
echo " 详细错误:"
tree-sitter parse temp_unit_complete.tsf
fi
echo "16.4 测试uses语句"
echo 'uses TestUnit; function main(); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ uses语句解析正常"
else
echo " ❌ uses语句解析失败"
echo " 详细错误:"
echo 'uses TestUnit; function main(); begin end;' | tree-sitter parse
fi
echo "16.5 测试多个uses"
echo 'uses Unit1, Unit2, Unit3; function main(); begin end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 多个uses解析正常"
else
echo " ❌ 多个uses解析失败"
echo " 详细错误:"
echo 'uses Unit1, Unit2, Unit3; function main(); begin end;' | tree-sitter parse
fi
echo "16.6 测试echo语句"
echo 'function test(); begin echo "Hello", " ", "World"; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ echo语句解析正常"
else
echo " ❌ echo语句解析失败"
echo " 详细错误:"
echo 'function test(); begin echo "Hello", " ", "World"; end;' | tree-sitter parse
fi
echo -e "\n步骤17: 测试复杂混合示例"
echo "17.1 测试复杂数组嵌套示例"
cat > temp_complex_array.tsf << 'EOF'
function complex_array_test();
begin
// 复杂嵌套数组结构
data := array(
"users": array(
("id": 1, "name": "Alice", "scores": array(85, 92, 78)),
("id": 2, "name": "Bob", "scores": array(91, 87, 95))
),
"metadata": array(
"total": 2,
"average": array(88.0, 89.5, 86.5),
"nested": array(
"level1": array(
"level2": array(1, 2, 3),
"level2b": (true, false, nil)
)
)
)
);
// 访问嵌套数据
first_user := data["users"][0];
first_score := first_user["scores"][0];
nested_value := data["metadata"]["nested"]["level1"]["level2"][1];
echo "First user score:", first_score;
echo "Nested value:", nested_value;
end
EOF
tree-sitter parse temp_complex_array.tsf > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 复杂数组嵌套示例解析正常"
else
echo " ❌ 复杂数组嵌套示例解析失败"
echo " 详细错误:"
tree-sitter parse temp_complex_array.tsf
fi
echo "17.2 测试完整应用示例"
cat > temp_full_app.tsf << 'EOF'
// 完整应用示例
uses Utils, DataTypes;
type DataProcessor = class(BaseProcessor)
public
function Create();overload;
function Create(config: ConfigType);overload;
function Process(data: array of string);
private
cache: CacheType;
settings: array of Setting;
end;
function DataProcessor.Create();overload;
begin
cache := new CacheType();
settings := array();
end;
function DataProcessor.Process(data: array of string);
begin
// 处理数据数组
result := array();
for i := 0 to length(data) - 1 do
begin
item := data[i];
processed := item ? transform(item) : default_value;
result[i] := processed;
end;
return result;
end;
function main();
begin
// 创建复杂数据结构
config := array(
"input": array("file1.txt", "file2.txt"),
"output": "result.txt",
"options": array(
"mode": "batch",
"parallel": true,
"workers": 4
)
);
// 创建处理器
processor := new DataProcessor();
processor.Create();
// 处理数据
input_data := config["input"];
results := processor.Process(input_data);
// 输出结果
echo "Processing completed. Results:", results.length, "items";
return results;
end;
EOF
tree-sitter parse temp_full_app.tsf > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 完整应用示例解析正常"
else
echo " ❌ 完整应用示例解析失败"
echo " 详细错误:"
tree-sitter parse temp_full_app.tsf
fi
# 🆕 新增步骤18测试解包destructuring语法
echo -e "\n步骤18: 测试解包destructuring语法"
echo "18.1 测试基础解包赋值"
echo 'function test(); begin [a, b, c] := array(1, 2, 3); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 基础解包赋值解析正常"
else
echo " ❌ 基础解包赋值解析失败"
echo " 详细错误:"
echo 'function test(); begin [a, b, c] := array(1, 2, 3); end;' | tree-sitter parse
fi
echo "18.2 测试函数返回值解包"
echo 'function test(); begin [x, y] := getCoordinates(); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 函数返回值解包解析正常"
else
echo " ❌ 函数返回值解包解析失败"
echo " 详细错误:"
echo 'function test(); begin [x, y] := getCoordinates(); end;' | tree-sitter parse
fi
echo "18.3 测试嵌套数组解包"
echo 'function test(); begin [first, second, third] := matrix[0]; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 嵌套数组解包解析正常"
else
echo " ❌ 嵌套数组解包解析失败"
echo " 详细错误:"
echo 'function test(); begin [first, second, third] := matrix[0]; end;' | tree-sitter parse
fi
echo "18.4 测试复杂解包示例"
echo 'function test(); begin [name, age, scores] := user_data["user1"]; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 复杂解包示例解析正常"
else
echo " ❌ 复杂解包示例解析失败"
echo " 详细错误:"
echo 'function test(); begin [name, age, scores] := user_data["user1"]; end;' | tree-sitter parse
fi
# 🆕 新增步骤19测试关键字语句echo、raise等
echo -e "\n步骤19: 测试关键字语句echo、raise等"
echo "19.1 测试echo语句"
echo 'function test(); begin echo "Hello", " ", "World"; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ echo多参数语句解析正常"
else
echo " ❌ echo多参数语句解析失败"
echo " 详细错误:"
echo 'function test(); begin echo "Hello", " ", "World"; end;' | tree-sitter parse
fi
echo "19.2 测试echo单参数"
echo 'function test(); begin echo variable; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ echo单参数解析正常"
else
echo " ❌ echo单参数解析失败"
fi
echo "19.3 测试echo表达式和函数调用"
echo 'function test(); begin echo "Count:", count + 1, func(); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ echo表达式和函数调用解析正常"
else
echo " ❌ echo表达式和函数调用解析失败"
fi
echo "19.4 测试基础raise语句"
echo 'function test(); begin raise "Error occurred"; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 基础raise语句解析正常"
else
echo " ❌ 基础raise语句解析失败"
echo " 详细错误:"
echo 'function test(); begin raise "Error occurred"; end;' | tree-sitter parse
fi
echo "19.5 测试raise变量"
echo 'function test(); begin raise error_message; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ raise变量解析正常"
else
echo " ❌ raise变量解析失败"
fi
echo "19.6 测试raise表达式"
echo 'function test(); begin raise "Error: " + error_code; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ raise表达式解析正常"
else
echo " ❌ raise表达式解析失败"
fi
echo "19.7 测试raise函数调用"
echo 'function test(); begin raise getErrorMessage(); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ raise函数调用解析正常"
else
echo " ❌ raise函数调用解析失败"
fi
# 🆕 新增步骤20测试$连接符(万能连接符)
echo -e "\n步骤20: 测试\$连接符(万能连接符)"
echo "20.1 测试基础字符串连接"
echo 'function test(); begin result := "Hello" $ " " $ "World"; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 基础字符串连接解析正常"
else
echo " ❌ 基础字符串连接解析失败"
echo " 详细错误:"
echo 'function test(); begin result := "Hello" $ " " $ "World"; end;' | tree-sitter parse
fi
echo "20.2 测试字符串与数字连接"
echo 'function test(); begin message := "Count: " $ count $ " items"; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 字符串与数字连接解析正常"
else
echo " ❌ 字符串与数字连接解析失败"
fi
echo "20.3 测试\$连接符在raise中使用"
echo 'function test(); begin raise "Error code " $ error_code $ " occurred"; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ \$连接符在raise中使用解析正常"
else
echo " ❌ \$连接符在raise中使用解析失败"
fi
echo "20.4 测试\$连接符在echo中使用"
echo 'function test(); begin echo "Value: " $ value $ ", Type: " $ type $ "!"; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ \$连接符在echo中使用解析正常"
else
echo " ❌ \$连接符在echo中使用解析失败"
fi
echo "20.5 测试复杂\$连接表达式"
echo 'function test(); begin result := name $ "(" $ age $ ")" $ " - " $ status; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 复杂\$连接表达式解析正常"
else
echo " ❌ 复杂\$连接表达式解析失败"
fi
echo "20.6 测试\$连接符优先级"
echo 'function test(); begin result := a + b $ " = " $ (a + b); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ \$连接符优先级解析正常"
echo " 📝 语义:(a + b) $ \" = \" $ (a + b),加法优先于连接"
else
echo " ❌ \$连接符优先级解析失败"
fi
# 🆕 新增步骤21测试判断语法is class 和 in
echo -e "\n步骤21: 测试判断语法is class 和 in"
echo "21.1 测试基础is class判断"
echo 'function test(); begin result := obj is class(MyClass); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 基础is class判断解析正常"
else
echo " ❌ 基础is class判断解析失败"
echo " 详细错误:"
echo 'function test(); begin result := obj is class(MyClass); end;' | tree-sitter parse
fi
echo "21.2 测试is class与qualified identifier"
echo 'function test(); begin result := instance is class(namespace.ClassName); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ is class与qualified identifier解析正常"
else
echo " ❌ is class与qualified identifier解析失败"
echo " 详细错误:"
echo 'function test(); begin result := instance is class(namespace.ClassName); end;' | tree-sitter parse
fi
echo "21.3 测试is class在if语句中"
echo 'function test(); begin if obj is class(Person) then echo "Is Person"; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ is class在if语句中解析正常"
else
echo " ❌ is class在if语句中解析失败"
echo " 详细错误:"
echo 'function test(); begin if obj is class(Person) then echo "Is Person"; end;' | tree-sitter parse
fi
echo "21.4 测试基础in判断数组字面量"
echo 'function test(); begin result := 1 in array(1, 2, 3); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 基础in判断数组字面量解析正常"
else
echo " ❌ 基础in判断数组字面量解析失败"
echo " 详细错误:"
echo 'function test(); begin result := 1 in array(1, 2, 3); end;' | tree-sitter parse
fi
echo "21.5 测试in判断变量"
echo 'function test(); begin result := item in my_array; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ in判断变量解析正常"
else
echo " ❌ in判断变量解析失败"
echo " 详细错误:"
echo 'function test(); begin result := item in my_array; end;' | tree-sitter parse
fi
echo "21.6 测试字符串in判断"
echo 'function test(); begin result := "apple" in array("apple", "banana", "orange"); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 字符串in判断解析正常"
else
echo " ❌ 字符串in判断解析失败"
echo " 详细错误:"
echo 'function test(); begin result := "apple" in array("apple", "banana", "orange"); end;' | tree-sitter parse
fi
echo "21.7 测试in判断在if语句中"
echo 'function test(); begin if value in valid_values then echo "Valid"; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ in判断在if语句中解析正常"
else
echo " ❌ in判断在if语句中解析失败"
echo " 详细错误:"
echo 'function test(); begin if value in valid_values then echo "Valid"; end;' | tree-sitter parse
fi
echo "21.8 测试复杂表达式的in判断"
echo 'function test(); begin result := (x + y) in calculateRange(); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 复杂表达式in判断解析正常"
else
echo " ❌ 复杂表达式in判断解析失败"
echo " 详细错误:"
echo 'function test(); begin result := (x + y) in calculateRange(); end;' | tree-sitter parse
fi
echo "21.9 测试嵌套数组的in判断"
echo 'function test(); begin result := target in data["items"]["list"]; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 嵌套数组in判断解析正常"
else
echo " ❌ 嵌套数组in判断解析失败"
echo " 详细错误:"
echo 'function test(); begin result := target in data["items"]["list"]; end;' | tree-sitter parse
fi
echo "21.10 测试判断语法组合使用"
echo 'function test(); begin if obj is class(MyClass) and value in valid_list then echo "Valid object and value"; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 判断语法组合使用解析正常"
else
echo " ❌ 判断语法组合使用解析失败"
echo " 详细错误:"
echo 'function test(); begin if obj is class(MyClass) and value in valid_list then echo "Valid object and value"; end;' | tree-sitter parse
fi
echo "21.11 测试is class与三元表达式"
echo 'function test(); begin type_name := obj is class(Person) ? "Person" : "Other"; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ is class与三元表达式解析正常"
else
echo " ❌ is class与三元表达式解析失败"
echo " 详细错误:"
echo 'function test(); begin type_name := obj is class(Person) ? "Person" : "Other"; end;' | tree-sitter parse
fi
# 🆕 新增步骤22测试矩阵运算
echo -e "\n步骤22: 测试矩阵运算"
echo "22.1 测试矩阵转置运算符(前缀)"
echo 'function test(); begin A := array((1,2,3),(2,3,4)); B := `A; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 矩阵转置运算符(前缀)解析正常"
else
echo " ❌ 矩阵转置运算符(前缀)解析失败"
echo " 详细错误:"
echo 'function test(); begin A := array((1,2,3),(2,3,4)); B := `A; end;' | tree-sitter parse
fi
echo "22.2 测试矩阵列连接运算符"
echo 'function test(); begin C := A | B; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 矩阵列连接运算符解析正常"
else
echo " ❌ 矩阵列连接运算符解析失败"
echo " 详细错误:"
echo 'function test(); begin C := A | B; end;' | tree-sitter parse
fi
echo "22.3 测试矩阵行连接运算符"
echo 'function test(); begin C := A union B; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 矩阵行连接运算符解析正常"
else
echo " ❌ 矩阵行连接运算符解析失败"
echo " 详细错误:"
echo 'function test(); begin C := A union B; end;' | tree-sitter parse
fi
echo "22.4 测试非完全矩阵列连接运算符"
echo 'function test(); begin C := A :| B; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 非完全矩阵列连接运算符解析正常"
else
echo " ❌ 非完全矩阵列连接运算符解析失败"
echo " 详细错误:"
echo 'function test(); begin C := A :| B; end;' | tree-sitter parse
fi
echo "22.5 测试矩阵求逆运算符"
echo 'function test(); begin B := !A; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 矩阵求逆运算符解析正常"
else
echo " ❌ 矩阵求逆运算符解析失败"
echo " 详细错误:"
echo 'function test(); begin B := !A; end;' | tree-sitter parse
fi
echo "22.6 测试矩阵乘法运算符"
echo 'function test(); begin C := A :* B; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 矩阵乘法运算符解析正常"
else
echo " ❌ 矩阵乘法运算符解析失败"
echo " 详细错误:"
echo 'function test(); begin C := A :* B; end;' | tree-sitter parse
fi
echo "22.7 测试矩阵左除运算符"
echo 'function test(); begin C := A :\ B; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 矩阵左除运算符解析正常"
else
echo " ❌ 矩阵左除运算符解析失败"
echo " 详细错误:"
echo 'function test(); begin C := A :\ B; end;' | tree-sitter parse
fi
echo "22.8 测试矩阵乘方运算符"
echo 'function test(); begin C := A :^ 3; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 矩阵乘方运算符解析正常"
else
echo " ❌ 矩阵乘方运算符解析失败"
echo " 详细错误:"
echo 'function test(); begin C := A :^ 3; end;' | tree-sitter parse
fi
echo "22.9 测试复杂矩阵运算组合"
echo 'function test(); begin result := `(A :* B) | (C union D); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 复杂矩阵运算组合解析正常"
else
echo " ❌ 复杂矩阵运算组合解析失败"
echo " 详细错误:"
echo 'function test(); begin result := `(A :* B) | (C union D); end;' | tree-sitter parse
fi
echo "22.10 测试嵌套矩阵转置"
echo 'function test(); begin result := ``A; nested := `(!matrix); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 嵌套矩阵转置解析正常"
else
echo " ❌ 嵌套矩阵转置解析失败"
echo " 详细错误:"
echo 'function test(); begin result := ``A; nested := `(!matrix); end;' | tree-sitter parse
fi
# 🆕 新增步骤23测试集合运算
echo -e "\n步骤23: 测试集合运算"
echo "23.1 测试集合并集运算"
echo 'function test(); begin result := setA union setB; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 集合并集运算解析正常"
else
echo " ❌ 集合并集运算解析失败"
echo " 详细错误:"
echo 'function test(); begin result := setA union setB; end;' | tree-sitter parse
fi
echo "23.2 测试集合并集2运算"
echo 'function test(); begin result := setA union2 setB; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 集合并集2运算解析正常"
else
echo " ❌ 集合并集2运算解析失败"
echo " 详细错误:"
echo 'function test(); begin result := setA union2 setB; end;' | tree-sitter parse
fi
echo "23.3 测试集合差集运算"
echo 'function test(); begin result := setA minus setB; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 集合差集运算解析正常"
else
echo " ❌ 集合差集运算解析失败"
echo " 详细错误:"
echo 'function test(); begin result := setA minus setB; end;' | tree-sitter parse
fi
echo "23.4 测试集合交集运算"
echo 'function test(); begin result := setA intersect setB; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 集合交集运算解析正常"
else
echo " ❌ 集合交集运算解析失败"
echo " 详细错误:"
echo 'function test(); begin result := setA intersect setB; end;' | tree-sitter parse
fi
echo "23.5 测试集合运算组合"
echo 'function test(); begin result := (setA union setB) intersect setC; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 集合运算组合解析正常"
else
echo " ❌ 集合运算组合解析失败"
echo " 详细错误:"
echo 'function test(); begin result := (setA union setB) intersect setC; end;' | tree-sitter parse
fi
# 🆕 新增步骤24测试复合赋值运算
echo -e "\n步骤24: 测试复合赋值运算(矩阵和集合)"
echo "24.1 测试集合并集复合赋值"
echo 'function test(); begin setA union= setB; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 集合并集复合赋值解析正常"
else
echo " ❌ 集合并集复合赋值解析失败"
echo " 详细错误:"
echo 'function test(); begin setA union= setB; end;' | tree-sitter parse
fi
echo "24.2 测试集合并集2复合赋值"
echo 'function test(); begin setA union2= setB; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 集合并集2复合赋值解析正常"
else
echo " ❌ 集合并集2复合赋值解析失败"
echo " 详细错误:"
echo 'function test(); begin setA union2= setB; end;' | tree-sitter parse
fi
echo "24.3 测试集合差集复合赋值"
echo 'function test(); begin setA minus= setB; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 集合差集复合赋值解析正常"
else
echo " ❌ 集合差集复合赋值解析失败"
echo " 详细错误:"
echo 'function test(); begin setA minus= setB; end;' | tree-sitter parse
fi
echo "24.4 测试集合交集复合赋值"
echo 'function test(); begin setA intersect= setB; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 集合交集复合赋值解析正常"
else
echo " ❌ 集合交集复合赋值解析失败"
echo " 详细错误:"
echo 'function test(); begin setA intersect= setB; end;' | tree-sitter parse
fi
echo "24.5 测试复杂复合赋值组合"
echo 'function test(); begin matrix.data union= processedData; obj.values intersect= validValues; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 复杂复合赋值组合解析正常"
else
echo " ❌ 复杂复合赋值组合解析失败"
echo " 详细错误:"
echo 'function test(); begin matrix.data union= processedData; obj.values intersect= validValues; end;' | tree-sitter parse
fi
# 🆕 新增步骤25测试表达式语句
echo -e "\n步骤25: 测试表达式语句"
echo "25.1 测试简单表达式语句"
echo 'function test(); begin x + y; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 简单表达式语句解析正常"
else
echo " ❌ 简单表达式语句解析失败"
echo " 详细错误:"
echo 'function test(); begin x + y; end;' | tree-sitter parse
fi
echo "25.2 测试函数调用表达式语句"
echo 'function test(); begin func(); obj.method(); end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 函数调用表达式语句解析正常"
else
echo " ❌ 函数调用表达式语句解析失败"
echo " 详细错误:"
echo 'function test(); begin func(); obj.method(); end;' | tree-sitter parse
fi
echo "25.3 测试复杂表达式语句"
echo 'function test(); begin a + b * c; obj.method().value; `matrix :* other; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 复杂表达式语句解析正常"
echo " 📝 包含:算术运算、方法链调用、前缀矩阵转置+乘法"
else
echo " ❌ 复杂表达式语句解析失败"
echo " 详细错误:"
echo 'function test(); begin a + b * c; obj.method().value; `matrix :* other; end;' | tree-sitter parse
fi
echo "25.4 测试自增自减表达式语句"
echo 'function test(); begin a++; ++b; c--; --d; obj.prop++; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 自增自减表达式语句解析正常"
else
echo " ❌ 自增自减表达式语句解析失败"
echo " 详细错误:"
echo 'function test(); begin a++; ++b; c--; --d; obj.prop++; end;' | tree-sitter parse
fi
echo "25.5 测试三元表达式语句"
echo 'function test(); begin condition ? value1 : value2; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ 三元表达式语句解析正常"
else
echo " ❌ 三元表达式语句解析失败"
echo " 详细错误:"
echo 'function test(); begin condition ? value1 : value2; end;' | tree-sitter parse
fi
# 清理临时文件
rm -f temp_*.tsf
# 🆕 修改:更新测试完成总结
echo -e "\n=== 测试完成 ==="
echo "✅ TSF语法解析器测试完成支持的特性包括"
echo " - 完整的函数定义和调用"
echo " - 复杂嵌套数组结构array语法"
echo " - 解包destructuring赋值语法"
echo " - 关键字语句echo、raise"
echo " - \$万能连接符运算符"
echo " - 判断语法is class、in"
echo " - 矩阵运算(转置、乘法、求逆、连接等)" # 🆕 添加
echo " - 集合运算(并集、交集、差集等)" # 🆕 添加
echo " - 类和对象系统(包括继承、访问控制)"
echo " - Unit模块系统"
echo " - 丰富的运算符(包括三元表达式)"
echo " - 完整的控制流语句"
echo " - 特殊查询语法vselect/select/sselect"
echo " - 多种数字格式和注释类型"
echo " - 数组索引和切片访问"