Skip to content

Commit cd44196

Browse files
committed
添加项目简介
1 parent a40ba3e commit cd44196

File tree

2 files changed

+221
-1
lines changed

2 files changed

+221
-1
lines changed

README.md

Lines changed: 221 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,222 @@
1+
12
# MyScript
2-
An interpreter written in v.
3+
4+
`MyScript`是一门基于[`V`](https://github.com/vlang/v)语言实现的脚本语言。
5+
6+
该项目并不具备实用价值,只是本菜鸟处出于兴趣对编译原理基础知识的一些实践,特性尚未完善,bug多的飞起,需要很多时间慢慢打磨。以下是`MyScript`内容的介绍:
7+
8+
## 基本类型
9+
10+
`MyScript`是一门动态类型,脚本型语言,以下是内置的基本类型:
11+
12+
### bool 布尔类型
13+
- `bool`类型的值只能是`true``false`,表示逻辑上的真与假。
14+
- 示例:
15+
```v
16+
i_love_you = true;
17+
you_love_me = false;
18+
```
19+
20+
### int 整数类型
21+
- `int`类型表示有符号64位整数。
22+
23+
- 示例:
24+
```v
25+
age = 25;
26+
count = -42;
27+
```
28+
29+
### float 小数类型
30+
- `float`类型表示64位浮点数。
31+
32+
- 示例:
33+
```v
34+
height = 5.9;
35+
weight = -70.5;
36+
```
37+
38+
### range 范围类型
39+
- `range`类型表示一段连续的数值范围。
40+
- 例如:`0..9`表示从0到8(包含0但不包含9)的整数范围。
41+
- 示例:
42+
```v
43+
range1 = 0..5; # 表示 0, 1, 2, 3, 4
44+
range2 = -3..3; # 表示 -3, -2, -1, 0, 1, 2
45+
```
46+
47+
### char 字符类型
48+
49+
- 字符对象由一对反引号表示,反引号内有且只有一个Unicode字符。
50+
51+
- 示例:
52+
53+
```v
54+
letter = `A`;
55+
digit = `5`;
56+
chinese = `爱`;
57+
```
58+
59+
### string 字符串类型
60+
61+
- 字符串对象由一对双引号或单引号表示,采用UTF-8编码。
62+
63+
- 字符串中的每个字符都有对应的位置值,称为索引,索引从0开始。
64+
65+
- 字符串的索引也可以是`range`类型的值。
66+
67+
```v
68+
name = "马冬梅";
69+
name[0]; # `马`
70+
word = '我爱你中国';
71+
word[0..3] # "我爱你"
72+
```
73+
74+
### function 函数类型
75+
-`MyScript`中, 通过`fn`关键字来定义一个函数对象。
76+
77+
- 示例:
78+
```v
79+
fn hello() {
80+
print('hello, world');
81+
}
82+
83+
add = fn (a, b) {
84+
return a + b;
85+
}
86+
87+
hello();
88+
print(add(10, 8));
89+
```
90+
91+
- 函数支持闭包,上级环境和闭包函数环境是两个单独的作用域。
92+
93+
- 示例:
94+
95+
```
96+
var = 123;
97+
print(var); # 此时 var 为 123
98+
99+
fn test() {
100+
var = 456;
101+
print(var); # 此时 var 为 456
102+
}
103+
104+
test();
105+
print(var); # 此时 var 为 123
106+
```
107+
108+
- `MyScript`实现了一些内置函数,包括:
109+
110+
| 函数定义 | 函数作用 |
111+
| :----------------------------- | :----------------------------------------- |
112+
| fn len(arg object) int | 计算指定对象(string\|list\|table)的长度 |
113+
| fn type(arg object) string | 获取对象类型的字符串 |
114+
| fn bool(arg object) bool | 将对象转换为 bool 对象并返回 |
115+
| fn char(arg object) bool | 将对象转换为 char 对象并返回 |
116+
| fn float(arg object) bool | 将对象转换为 float 对象并返回 |
117+
| fn int(arg object) bool | 将对象转换为 int 对象并返回 |
118+
| fn list(arg object) bool | 将对象转换为 list 对象并返回 |
119+
| fn string(object) string | 将对象转换为 string 对象并返回 |
120+
| fn clone(arg object) object | 将对象拷贝一份并返回 |
121+
| fn print(args ...object) | 打印不定长度的对象,分隔符为空格 |
122+
| fn println(args ...object) | 打印不定长度的对象,分隔符为换行符 |
123+
| fn input(prompt string) string | 从控制台获取一段输入,prompt参数为提示内容 |
124+
125+
126+
127+
### list 列表类型
128+
129+
- 列表对象由一对中括号"[]"表示,元素间用逗号分隔,每个元素可以是不同类型。
130+
- 列表中的每个元素都有对应索引,索引从0开始。
131+
- 可以通过索引获取或重新赋值列表中的元素。
132+
- 示例:
133+
```v
134+
list = [1, 'two', 3.0, true];
135+
136+
print(nums[1]); # 2
137+
nums[3] = `4`; # nums 变为 [1, 'two', 3.0, `4`];
138+
```
139+
140+
### table 字典类型
141+
- 字典对象由一对大括号"{}"表示,键值对用冒号(:)分隔,键只能是`int`, `string`, `char`类型,值可以是任何类型。
142+
- 字典对象的键值对间用逗号(,)分隔。
143+
- 示例:
144+
```v
145+
person = {
146+
'name': 'Bob',
147+
'age': 30,
148+
'is_student': false
149+
}
150+
151+
name = person['name']; # 'Bob'
152+
person['age'] = 31; # 修改age的值
153+
```
154+
155+
### null 空类型
156+
- `null`表示空对象,可以用来删除一个变量。
157+
- 示例:
158+
```v
159+
value = 123;
160+
print(value); # 123
161+
value = null;
162+
print(value); # ERROR: 标识符 "value" 没有绑定的值
163+
```
164+
165+
- `null`同样可以用来删除`list`对象和`table`对象中的元素。
166+
167+
- 示例:
168+
169+
```
170+
list = [0, 1, 2, 3];
171+
list[-1] = null; # 此时 list 为 [0, 1, 2]
172+
173+
table = {'name': '张三', 'age': 33};
174+
table['age'] = null; # 此时 table 为 {'age': 33}
175+
```
176+
177+
178+
179+
## 流程控制
180+
181+
### if条件语句
182+
183+
```
184+
num = 10;
185+
if (num == 10) {
186+
print('num 的值等于10');
187+
} else {
188+
print('num 的值不等于10');
189+
}
190+
```
191+
192+
条件赋值(if表达式)
193+
194+
```
195+
love_you = false
196+
word = if (love_you) { '喜欢你' } else { '讨厌你' } # '讨厌你'
197+
```
198+
199+
### for遍历语句
200+
201+
```
202+
for (v in 0..5) {
203+
# 此时 v 的值依次为: 0, 1, 2, 3, 4
204+
}
205+
206+
for (v in [true, '你好', 123.44]) {
207+
# 此时 v 的值依次为: true, '你好', 123.44
208+
}
209+
210+
for (v in {'name': '张三', 'age': 33}) {
211+
# 此时 v 的值依次为: 'name', 'age'
212+
}
213+
```
214+
215+
### while循环语句
216+
217+
```
218+
while (condition) {
219+
# 当 condition 为 true 时该代码块会循环执行
220+
}
221+
```
222+

myscript.exe

-1.17 MB
Binary file not shown.

0 commit comments

Comments
 (0)