1790 lines
60 KiB
Bash
1790 lines
60 KiB
Bash
#!/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 " - 数组索引和切片访问"
|