Skip to content

Commit 51846ea

Browse files
committed
parser for global
1 parent 2caaafa commit 51846ea

File tree

8 files changed

+640
-95
lines changed

8 files changed

+640
-95
lines changed

GLOBAL_KEYWORD_IMPLEMENTATION.md

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -143,10 +143,13 @@ local global = 10 -- 'global' 作为变量名
143143

144144
2. **parseGlobal 函数** (约第 3123 行,新增)
145145
- 完整实现了三种 global 语法的解析
146+
- 支持初始化赋值:`global x = 10`
146147
- 处理属性(attrib)的解析和关联
147-
- 支持多变量声明的解析
148+
- 支持多变量声明的解析:`global a, b, c = 1, 2, 3`
149+
- 检查 global 不能有 close 属性
150+
- 使用 parseMultiVars 处理初始化赋值
148151

149-
3. **parseAction 函数** (约第 4044 行)
152+
3. **parseAction 函数** (约第 4117 行)
150153
- 添加了 global 关键字的分发逻辑
151154
- 使用 `isKeyWord` 检查确保版本正确性
152155

@@ -160,25 +163,55 @@ global function myGlobalFunction()
160163
return 42
161164
end
162165

163-
-- 示例 2: 声明全局变量
166+
-- 示例 2: 声明全局变量(无初始化)
164167
global x
165168

166-
-- 示例 3: 声明带常量属性的全局变量
169+
-- 示例 3: 声明并初始化全局变量
170+
global y = 100
171+
172+
-- 示例 4: 声明带常量属性的全局变量
167173
global <const> PI = 3.14159
168174

169-
-- 示例 4: 声明多个全局变量
175+
-- 示例 5: 声明多个全局变量
170176
global width, height, depth
171177

172-
-- 示例 5: 声明带不同属性的多个全局变量
173-
global <const> MAX_SIZE, <close> file, counter
178+
-- 示例 6: 声明并初始化多个全局变量
179+
global a, b, c = 1, 2, 3
180+
181+
-- 示例 7: 声明带不同属性的多个全局变量
182+
global <const> MAX_SIZE = 100, counter = 0
183+
184+
-- 示例 8: 属性可以在变量名前后
185+
global x <const>, <const> y
174186

175-
-- 示例 6: 声明所有后续变量为全局
187+
-- 示例 9: 声明所有后续变量为全局(可读写)
176188
global *
177-
x = 1 -- x 是全局变量
178-
y = 2 -- y 是全局变量
189+
x = 1 -- x 自动成为全局变量
190+
y = 2 -- y 自动成为全局变量
179191

180-
-- 示例 7: 带属性的全局所有
192+
-- 示例 10: 声明所有后续变量为只读全局
181193
global <const> *
194+
print(math.pi) -- OK,print 和 math 自动为只读
195+
z = 1 -- 错误!z 被声明为只读
196+
```
197+
198+
### 错误示例
199+
200+
```lua
201+
-- 错误 1: global 不能有 close 属性
202+
global x <close> -- 解析错误!
203+
204+
-- 错误 2: 在隐式 global * 失效的作用域内使用未声明变量
205+
global x
206+
y = 1 -- 错误:y 未声明(需要语义分析支持)
207+
208+
-- 错误 3: 赋值给 const 变量
209+
global <const> PI = 3.14
210+
PI = 3.15 -- 错误:不能赋值给常量(需要语义分析支持)
211+
212+
-- 错误 4: 初始化已存在的全局变量
213+
X = 10
214+
global X = 20 -- 运行时错误:X 已定义(需要语义分析支持)
182215
```
183216

184217
## 后续工作

0 commit comments

Comments
 (0)