Skip to content

Commit 6818d5e

Browse files
committed
refactor(exception): upgrade exception management system
1. refactor and upgrade the exception information management system 2. ignore .vscode please refer to the work log for details
1 parent bd68022 commit 6818d5e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+1692
-723
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ bin
33
build
44
CMakeFiles
55
CMakeCache.txt
6-
.xmake
6+
.xmake
7+
.vscode

.vscode/c_cpp_properties.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"${workspaceFolder}/src/compiler/",
1212
"${workspaceFolder}/src/sfn/",
1313
"${workspaceFolder}/src/action/",
14-
"${workspaceFolder}/src/error/",
14+
"${workspaceFolder}/src/exception/",
1515
"${workspaceFolder}/src/config/",
1616
"${workspaceFolder}/src/"
1717
],

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ include_directories(${PROJECT_SOURCE_DIR}/src/ir)
3939
include_directories(${PROJECT_SOURCE_DIR}/src/compiler)
4040
include_directories(${PROJECT_SOURCE_DIR}/src/sfn)
4141
include_directories(${PROJECT_SOURCE_DIR}/src/tac)
42-
include_directories(${PROJECT_SOURCE_DIR}/src/error)
42+
include_directories(${PROJECT_SOURCE_DIR}/src/exception)
4343
include_directories(${PROJECT_SOURCE_DIR}/src/config)
4444
include_directories(${PROJECT_SOURCE_DIR}/src/action)
4545

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ LINK = -I include/stdc_implemented \
1414
-I src/sfn \
1515
-I src/tac \
1616
-I src/action \
17-
-I src/error \
17+
-I src/exception \
1818
-I src/config \
1919
-I src \
2020
-lm

demos/demo.stvc

0 Bytes
Binary file not shown.

demos/demo1.stvc

0 Bytes
Binary file not shown.

demos/demo2.stvc

0 Bytes
Binary file not shown.
Lines changed: 232 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,232 @@
1+
# Stamon错误及警告信息修复指南
2+
3+
> 本文件为``src/exception/codegen/codegen.py``根据配置文件自动生成,用户可以用搜索文本的方式快速定位自己的问题
4+
5+
### astrunner
6+
7+
##### TypeError
8+
9+
错误的数据类型被参与计算。例如字符串与整数相加时会触发此错误。
10+
11+
##### PostfixError
12+
13+
未知后缀类型。这是运行端内部错误,请检查传递给运行端的二进制文件是否合理。
14+
15+
##### IndexError
16+
17+
数列访问越界。当访问的下标大等于数列长度时会触发此错误。
18+
19+
##### ConstantsError
20+
21+
错误的常量表下标。这是运行端内部错误,请检查传递给运行端的二进制文件是否合理。
22+
23+
##### ZeroDivisionError
24+
25+
零作为除数。请检查运算过程中是否出现零作为除数的现象。
26+
27+
##### BreakError
28+
29+
break语句在循环体外。break语句作为循环流程控制相关的语句,必须在循环语句之内出现。原则上该报错会在编译端出现,因此如果运行端才出现此报错,请检查编译端是否正常,以及传递给运行端的二进制文件是否合理。
30+
31+
##### ContinueError
32+
33+
continue语句在循环体外。continue语句作为循环流程控制相关的语句,必须在循环语句之内出现。原则上该报错会在编译端出现,因此如果运行端才出现此报错,请检查编译端是否正常,以及传递给运行端的二进制文件是否合理。
34+
35+
##### ArgumentsError
36+
37+
调用该函数需要的参数与所传递的参数个数不符。请检查调用函数的过程中是否出现参数传递错误。
38+
39+
##### ReturnError
40+
41+
return语句在函数外。return语句作为函数相关的语句,必须在函数体之内出现。
42+
43+
##### UnknownOperatorError
44+
45+
未知运算符。这是运行端内部错误,请检查传递给运行端的二进制文件是否合理。
46+
47+
##### UnknownMemberError
48+
49+
对象没有指定的成员,请检查成员标识符是否输入正确。
50+
51+
##### LengthError
52+
53+
长度必须是非负数。请检查申请数列的长度是否是负数。
54+
55+
##### NegativeShiftError
56+
57+
负数位移。位移运算中的位移数必须是非负数,请检查位移运算中的位移数是否是负数。
58+
59+
### compiler
60+
61+
##### StringError
62+
63+
字符串格式有误。例如转义字符输入错误时有可能触发此错误。请检查字符串是否由一对双引号包裹,转义字符是否输入正确。
64+
65+
##### FloatError
66+
67+
字符串格式有误。例如转义字符输入错误时有可能触发此错误。请检查字符串是否由一对双引号包裹,转义字符是否输入正确。
68+
69+
##### TokenError
70+
71+
未知的词法单元。当用户输入非法字符(例如英文问号)时会触发此错误,请检查代码中是否包含非法字符。
72+
73+
##### SyntaxError
74+
75+
综合语法错误。该报错的触发条件多种多样,在Stamon的语法当中,会出现一些固定的语法搭配,当用户输入的语法搭配与规定的不一致时,会触发此错误,例如语句末尾未加分号。请用户根据编译器报告的错误位置,对照《Stamon语法教程手册》,检查语法搭配是否一致。值得注意的是:有些错误实际需要解决的位置,或许和编译器报告的错误位置并不完全一样,但两者肯定存在对应关系,所以请用户认真检查错误位置所在行及其关联的代码是否有误。
76+
77+
##### VariableRedeclaredError
78+
79+
变量被重复强定义。对于此类错误,推荐一种解决方案——前置定义设计:先为专门建立一个源码文件(被称为前置定义文件),并使用def关键字来强定义所有全局标识符(即前置定义);并在其他源文件的开头先引用这个前置定义文件,在其他源文件中,不直接使用def关键字来强定义全局标识符,而是采用直接赋值或弱定义的形式。这种代码设计思路,可以确保所有全局标识符只被强定义一次。对于局部标识符,请确保最多被强定义一次。有关如何使用强定义、弱定义和赋值,也可以参照《Stamon语法教程手册》中的相关内容。值得注意的是:请确保需要用到的全局标识符在def之后有相关的实现,否则在使用被强定义但未赋值的标识符时,会出现对空值进行操作的情况,从而引起运行时错误。
80+
81+
##### SfnError
82+
83+
SFN语句的端口或参数必须是标识符。
84+
85+
##### BreakError
86+
87+
break语句在循环体外。break语句作为循环流程控制相关的语句,必须在循环语句之内出现。
88+
89+
##### ContinueError
90+
91+
continue语句在循环体外。continue语句作为循环流程控制相关的语句,必须在循环语句之内出现。
92+
93+
##### MemberError
94+
95+
类成员名必须是标识符。
96+
97+
##### VariableError
98+
99+
变量名必须是标识符。
100+
101+
##### BraceError
102+
103+
花括号未闭合,请检查错误位置及其关联位置是否存在未闭合的花括号对。
104+
105+
##### SquareBracketError
106+
107+
方括号未闭合,请检查错误位置及其关联位置是否存在未闭合的方括号对。
108+
109+
##### RoundBracketError
110+
111+
圆括号未闭合,请检查错误位置及其关联位置是否存在未闭合的圆括号对。
112+
113+
##### ClassDefinedError
114+
115+
类定义中,只能定义成员函数、成员类和成员变量。
116+
117+
##### ImportError
118+
119+
不能引用其他源码。只有当编译器被指定为不能引用其他文件的模式,并且源码中调用了其他文件时,才会触发此错误。
120+
121+
##### AssignmentError
122+
123+
表达式的左操作数必须是左值。其中对左值的严格定义是:一个变量取任意次元素和成员的表达式。
124+
125+
##### UndefinedVariableError
126+
127+
未定义变量。请在使用变量前先使用强定义或弱定义的方式定义变量。
128+
129+
##### LargeIntegerWarning
130+
131+
整数过大从而导致溢出。这会导致程序执行时出现数值与代码中数值不同的情况。
132+
133+
##### LargeFloatWarning
134+
135+
浮点数过大从而导致溢出。这会导致程序执行时出现数值与代码中数值不同的情况。
136+
137+
### astfilereader
138+
139+
##### FormatError
140+
141+
Ast文件综合编码错误,请检查编码格式或重新编码。
142+
143+
##### NodeError
144+
145+
Ast文件出现了未知节点,请检查编码格式或重新编码。
146+
147+
##### RedundantRootNodeError
148+
149+
Ast文件有多余的根节点,请检查编码格式或重新编码。
150+
151+
##### RootNodeError
152+
153+
Ast文件没有根节点,请检查编码格式或重新编码。
154+
155+
##### RedundantEndNodeError
156+
157+
Ast文件有多余的结束单元,请检查编码格式或重新编码。
158+
159+
##### EndNodeError
160+
161+
Ast文件缺失结尾单元,请检查编码格式或重新编码。
162+
163+
### astir
164+
165+
##### RootNodeError
166+
167+
未在解码过程中发现根节点,请检查编码文件或重新编译。
168+
169+
##### RedundantEndNodeError
170+
171+
解码过程中出现多余的结束单元,请检查编码文件或重新编译。
172+
173+
##### RedundantRootNodeError
174+
175+
解码过程中出现多个根节点,请检查编码文件或重新编译。
176+
177+
##### EndNodeError
178+
179+
解码过程中缺失结束单元,请检查编码文件或重新编译。
180+
181+
### astirreader
182+
183+
##### CodeSizeError
184+
185+
AST-IR文件过小,请检查编码文件或重新编译。
186+
187+
##### FormatError
188+
189+
该文件的魔数不是0xABDB,由此推断该文件不是AST-IR字节码,请检查编码文件或重新编译。
190+
191+
##### ConstantsError
192+
193+
该文件存在未知的常量,请检查编码文件或重新编译。
194+
195+
### objectmanager
196+
197+
##### MemoryError
198+
199+
GC后占用内存仍然超出限制,请调整内存大小限制或优化代码。
200+
201+
##### PhysicalMemoryError
202+
203+
物理内存不足,请调整内存大小限制或优化代码。
204+
205+
##### IdentifierError
206+
207+
访问了未定义的标识符,通常情况下,标识符的定义问题会在编译期报告,因此需仔细检查字节码文件是否被损坏或是否存在其他内部异常。
208+
209+
##### ObjectError
210+
211+
发现了未知类型的对象,通常情况下,对象由虚拟机生成,也可能由SFN等外部接入的代码产生,因此请仔细检查虚拟机是否存在内部异常或外部接入的代码是否存在异常。
212+
213+
### tokenfilereader
214+
215+
##### FormatError
216+
217+
文件格式综合错误,请检查编码文件或重新编码。
218+
219+
##### TokenError
220+
221+
该文件出现未知的Token,请检查编码文件或重新编码。
222+
223+
### sfn
224+
225+
##### SFNError
226+
227+
SFN产生的综合性错误。
228+
229+
##### SFNWarning
230+
231+
SFN产生的综合性警告。
232+

0 commit comments

Comments
 (0)