Skip to content

Commit a1b71b4

Browse files
committed
docs(*): update a new document
1. change the naming convention of codes 2. update a new document please refer to the work log for details
1 parent 9e33aec commit a1b71b4

File tree

11 files changed

+228
-47
lines changed

11 files changed

+228
-47
lines changed

.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@
7070
"stop_token": "cpp",
7171
"thread": "cpp",
7272
"regex": "cpp",
73-
"valarray": "cpp"
73+
"valarray": "cpp",
74+
"typeindex": "cpp"
7475
},
7576
"C_Cpp.errorSquiggles": "disabled",
7677
}

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: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
# Stamon错误及警告信息修复指南
2+
3+
用户在编写代码时,若出现编译期或运行时错误(或警告),本指南就可以提供更详细的解释信息以及修复方向。
4+
5+
## 编译端有关信息
6+
7+
### 错误信息
8+
9+
#### the string was entered incorrectly
10+
11+
字符串格式有误。例如转义字符输入错误时有可能触发此错误。请检查字符串是否由一对双引号包裹,转义字符是否输入正确。
12+
13+
#### the floating point was entered incorrectly
14+
15+
浮点数输入错误。当小数点后没有跟着数字时,会触发此错误,请检查浮点数的输入格式是否正确。
16+
17+
#### unknown token: 'XXX'
18+
19+
未知的词法单元。当用户输入非法字符(例如英文问号)时会触发此错误,请检查代码中是否包含非法字符。
20+
21+
#### invalid syntax
22+
23+
综合语法错误。该报错的触发条件多种多样,在Stamon的语法当中,会出现一些固定的语法搭配,当用户输入的语法搭配与规定的不一致时,会触发此错误,例如语句末尾未加分号。请用户根据编译器报告的错误位置,对照《Stamon语法教程手册》,检查语法搭配是否一致。值得注意的是:有些错误实际需要解决的位置,或许和编译器报告的错误位置并不完全一样,但两者肯定存在对应关系,所以请用户认真检查错误位置所在行及其关联的代码是否有误。
24+
25+
#### variable "XXX" are declared repeatedly
26+
27+
变量被重复强定义。关于“强定义”的解释可以参照《Stamon语法教程手册》中的相关内容。对于此类错误,推荐一种解决方案——**前置定义设计**
28+
先为专门建立一个源码文件(被称为前置定义文件),并使用**def**关键字来强定义所有全局标识符(即前置定义);并在其他源文件的开头先引用这个前置定义文件,在其他源文件中,不直接使用**def**关键字来强定义全局标识符,而是采用直接赋值或弱定义的形式。这种代码设计思路,可以确保所有全局标识符只被强定义一次。对于局部标识符,请确保最多被强定义一次。有关如何使用强定义、弱定义和赋值,也可以参照《Stamon语法教程手册》中的相关内容。值得注意的是:请确保需要用到的全局标识符在**def**之后有相关的实现,否则在使用被强定义但未赋值的标识符时,会出现对空值进行操作的情况,从而引起运行时错误。
29+
30+
#### the port or argument of the SFN statement must be an identifier
31+
32+
SFN语句的端口或参数必须是标识符。有关“SFN语句”的解释可以参照《Stamon语法教程手册》中的相关内容。
33+
34+
#### 'continue' outside loop
35+
36+
continue语句在循环体外。continue语句作为循环流程控制相关的语句,必须在循环语句之内出现。
37+
38+
#### 'break' outside loop
39+
40+
break语句在循环体外。break语句作为循环流程控制相关的语句,必须在循环语句之内出现。
41+
42+
#### the member name must be an identifier
43+
44+
类成员名必须是标识符。有关标识符的命名规范可以参照《Stamon语法教程手册》中的相关内容。
45+
46+
#### the name of the variable must be an identifier
47+
48+
变量名必须是标识符。有关标识符的命名规范可以参照《Stamon语法教程手册》中的相关内容。
49+
50+
#### the brace are not closed
51+
52+
花括号未闭合,请检查错误位置及其关联位置是否存在未闭合的花括号对。
53+
54+
#### the square bracket are not closed
55+
56+
方括号未闭合,请检查错误位置及其关联位置是否存在未闭合的方括号对。
57+
58+
#### the round bracket are not closed
59+
60+
圆括号未闭合,请检查错误位置及其关联位置是否存在未闭合的圆括号对。
61+
62+
#### only functions, classes and variables can be defined in a class
63+
64+
类定义中,只能定义成员函数、成员类和成员变量。有关类定义的规范可以参照《Stamon语法教程手册》中的相关内容。
65+
66+
#### cannot import
67+
68+
不能引用其他源码。只有当编译器被指定为不能引用其他文件的模式,并且源码中调用了其他文件时,才会触发此错误。有关参数指定的内容可以参照《Stamon发行版使用指南》。
69+
70+
#### the left operand of an assignment must be an lvalue
71+
72+
表达式的左操作数必须是左值。引用《Stamon语法教程手册》中的注意事项:“请确保赋值的左操作数是左值,其中对左值的严格定义是:一个变量取任意次元素和成员的表达式”。
73+
74+
#### undefined variable: "XXX"
75+
76+
未定义变量。请在使用变量前先使用强定义或弱定义的方式定义变量。
77+
78+
### 警告信息
79+
80+
#### the integer is too large
81+
82+
整数过大从而导致溢出。这会导致程序执行时出现数值与代码中数值不同的情况。
83+
84+
#### the floating point is too large
85+
86+
浮点数过大从而导致溢出。这会导致程序执行时出现数值与代码中数值不同的情况。
87+
88+
## 运行端(AstRunner)有关信息
89+
90+
### 错误信息
91+
92+
#### an error of data type 'XXX' occurred in the calculation
93+
94+
错误的数据类型被参与计算。例如字符串与整数相加时会触发此错误。
95+
96+
#### unknown type of postfix
97+
98+
未知后缀类型。这是运行端内部错误,请检查传递给运行端的二进制文件是否合理。
99+
100+
#### list index out of range
101+
102+
数列访问越界。当访问的下标大等于数列长度时会触发此错误。
103+
104+
#### wrong index of constants
105+
106+
错误的常量表下标。这是运行端内部错误,请检查传递给运行端的二进制文件是否合理。
107+
108+
#### division by zero
109+
110+
零作为除数。请检查运算过程中是否出现零作为除数的现象。
111+
112+
#### 'continue' outside loop
113+
114+
continue语句在循环体外。continue语句作为循环流程控制相关的语句,必须在循环语句之内出现。原则上该报错会在编译端出现,因此如果运行端才出现此报错,请检查编译端是否正常,以及传递给运行端的二进制文件是否合理。
115+
116+
#### 'break' outside loop
117+
118+
break语句在循环体外。break语句作为循环流程控制相关的语句,必须在循环语句之内出现。原则上该报错会在编译端出现,因此如果运行端才出现此报错,请检查编译端是否正常,以及传递给运行端的二进制文件是否合理。
119+
120+
#### takes A form arguments but B was given
121+
122+
调用该函数需要A个参数,但传递了B个参数。请检查调用函数的过程中是否出现参数传递错误。
123+
124+
#### 'return' outside function
125+
126+
return语句在函数外。return语句作为函数相关的语句,必须在函数体之内出现。
127+
128+
#### unknown operator
129+
130+
未知运算符。这是运行端内部错误,请检查传递给运行端的二进制文件是否合理。
131+
132+
#### object has no member 'XXX'
133+
134+
对象没有名为XXX的成员,请检查成员标识符是否输入正确
135+
136+
#### the length must be non-negative
137+
138+
长度必须是非负数。请检查申请数列的长度是否是负数。
139+
140+
#### negative shift count
141+
142+
负数位移。位移运算中的位移数必须是非负数,请检查位移运算中的位移数是否是负数。
143+
144+
### 警告信息
145+
146+
暂无。

doc/发行版使用指南.md

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,19 @@ Stamon目前支持以下指令:
1515

1616
<br>
1717

18-
* ``stamon version``
18+
* ``stamon version````stamon -v``
1919

2020
该指令用于输出Stamon当前的版本号。
2121

2222
<br>
2323

24-
* ``stamon help``
24+
* ``stamon help````stamon -h``
2525

2626
该指令用于输出Stamon的用法以及各种参数的介绍。
2727

2828
<br>
2929

30-
* ``stamon build [src] [dst] [options...]``
30+
* ``stamon build [src] [dst] [options...]````stamon -b [src] [dst] [options...]``
3131

3232
该指令用于编译Stamon代码,其中src为必要参数,表示编译的Stamon文件名,dst为可选参数,表示生成的字节码文件名(默认a.stvc),options为可选参数,他们包括:
3333

@@ -44,7 +44,7 @@ Stamon目前支持以下指令:
4444

4545
<br>
4646

47-
* ``stamon run [src] [options...]``
47+
* ``stamon run [src] [options...]````stamon -r [src] [options...]``
4848

4949
该指令用于运行STVC文件,其中src为必要参数,表示编译的Stamon文件名,options为可选参数,他们包括:
5050

@@ -60,9 +60,14 @@ Stamon目前支持以下指令:
6060

6161
<br>
6262

63-
* ``stamon strip [src]``
63+
* ``stamon strip [src] [options...]````stamon -s [src]``
6464

65-
该指令用于剥削STVC调试信息,其中src为必要参数,表示待剥削的STVC文件
65+
该指令用于剥削STVC调试信息,其中src为必要参数,表示待剥削的STVC文件,options为可选参数,他们包括:
6666

67+
|参数用法|功能|默认值|支持此参数的最低版本|
68+
|-|-|-|-|
69+
|--IgnoreWarning|忽略警告|默认只进行警告|2.4.28|
70+
|--JustWarn|只进行警告|默认只进行警告|2.4.28|
71+
|--FatalWarning|将警告作为致命错误|默认只进行警告|2.4.28|
6772

6873
> ——摘自``工作日志/20240616.md``,有改动

doc/工作日志/20250406.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# 2025/04/06 工作日志
2+
3+
本次更新不会修改任何版本。
4+
5+
### 对报错信息进行调整
6+
7+
细化报错信息,让用户可以更具体的知道错误所在的位置以及修复方法。同时整理了一些遗漏的报错信息。
8+
9+
### 修改了命名规范,微调了代码
10+
11+
对于``Lexer.cpp``中对Token编号的命名进行了微调,``Compiler.cpp``也进行了微调。
12+
13+
### 提交新的文档
14+
15+
上传了``Stamon错误及警告信息修复指南.md``,该指南能给用户提供错误信息的解释和修复方向。

src/compiler/Compiler.hpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ class Compiler {
1919
STMException *ex;
2020
ArrayList<String> *ErrorMsg;
2121
ArrayList<String> *WarningMsg;
22-
bool ImportFlag = false;
2322

2423
Compiler() {
2524
}
@@ -30,10 +29,10 @@ class Compiler {
3029
src = right.src;
3130
ex = right.ex;
3231
ErrorMsg = right.ErrorMsg;
33-
ImportFlag = right.ImportFlag;
3432
}
3533

36-
Compiler(STMException *e, ArrayList<String> *error_msg, ArrayList<String> *warning_msg)
34+
Compiler(STMException *e, ArrayList<String> *error_msg,
35+
ArrayList<String> *warning_msg)
3736
: filemap(e)
3837
, global_scope(e) {
3938

@@ -45,7 +44,6 @@ class Compiler {
4544
}
4645

4746
void compile(String filename, bool isSupportImport) {
48-
ImportFlag = isSupportImport;
4947

5048
LineReader reader = filemap.mark(filename);
5149

@@ -98,7 +96,8 @@ class Compiler {
9896

9997
Matcher matcher(lexer, ex);
10098
Parser *parser = new Parser(
101-
matcher, ex, global_scope, filename, src, filemap, ErrorMsg, ImportFlag);
99+
matcher, ex, global_scope, filename, src, filemap, ErrorMsg,
100+
isSupportImport);
102101

103102
ast::AstNode *node = parser->Parse(); // 语法分析
104103

src/compiler/Lexer.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,12 @@ namespace stamon::c { //编译器命名空间
9999
KEYWORDS_MAX, //关键词个数
100100
TokenAssign,//赋值
101101
TokenSemi, //分号
102-
TokenLBC, //左花括号
103-
TokenRBC, //右花括号
104-
TokenLBR, //左括号
105-
TokenRBR, //右括号
106-
TokenLSB, //左方括号
107-
TokenRSB, //右方括号
102+
TokenLBC, //左花括号(Left BraCe)
103+
TokenRBC, //右花括号(Right BraCe)
104+
TokenLRB, //左括号(Left Round Bracket)
105+
TokenRRB, //右括号(Right Round Bracket)
106+
TokenLSB, //左方括号(Left Square Bracket)
107+
TokenRSB, //右方括号(RightSquare Bracket)
108108
TokenCmm, //逗号
109109
TokenColon, //冒号
110110
TokenMember,//小数点
@@ -540,8 +540,8 @@ namespace stamon::c { //编译器命名空间
540540
CHECK_OPERATOR(';', TokenSemi)
541541
CHECK_OPERATOR('{', TokenLBC)
542542
CHECK_OPERATOR('}', TokenRBC)
543-
CHECK_OPERATOR('(', TokenLBR)
544-
CHECK_OPERATOR(')', TokenRBR)
543+
CHECK_OPERATOR('(', TokenLRB)
544+
CHECK_OPERATOR(')', TokenRRB)
545545
CHECK_OPERATOR('[', TokenLSB)
546546
CHECK_OPERATOR(']', TokenRSB)
547547
CHECK_OPERATOR(',', TokenCmm)

0 commit comments

Comments
 (0)