# Aq语言语法设计文档

# 概览

为满足AQ语言持续发展，提升AQ语言在软件开发的便捷性和高效性，提升AQ语言长期持续有效发展，推进AQ v0.2.0 版本更快面向市场发布，决定对AQ语言的语法进行规范。

其详细的语法参照市面上常见的编程语言，总结其共有特点，对语言语法进行简化，同时完善部分语言的历史性问题，在语法上进行优化，降低学习难度和成本。

# 注释

注释参照C/C++等C-style语言的设计，采用两种注释方式。

```c
// 单行注释
/*多
  行
  注
  释*/
```

# 运算符

基本采取和主流语言一致（参照C/C++），部分特殊处理。

```python
原生类型（参照Python和Java）
有none对象
byte（bool和char类型）为1字节
int和long同长为8字节
float和double同长为8字节

字符串（参照Python）
字符串是原始类型
可以直接操作字符串进行加法
"字符串1" + "字符串2" == "字符串1字符串2"

不同的字符串样式（参照Python）
'字符串样式1'
"字符串样式2"
```

# 变量

参照Python和JavaScript，包含C/C++语法。

```javascript
变量声明或变量定义
形式1（参照JavaScript）
var 变量名;
var 变量名 = 变量值;

形式2（auto关键字等效于var关键字）
auto 变量名;
auto 变量名 = 变量值;

形式3（参照Python）
变量名;
变量名 = 变量值;

形式4（参照C/C++）
int 变量名;
int 变量名 = 变量值;
```

# 流程控制

基本采取和主流语言一致（参照C/C++），部分特殊处理。

```cpp
判断语句1（参照C/C++）
if (条件1) {
符合条件1执行的代码
} else if (条件2) {
不符合条件1符合条件2执行的代码（可省略）
} else {
全部不符合执行的代码（可省略）
}

判断语句2（参照C/C++）
if (条件) 运行代码（仅适用于一行运行代码的情况）

重复语句1（参照C/C++）
while (重复条件) {
符合重复条件运行的代码
}

重复语句2（参照C/C++）
while (重复条件) 运行代码（仅适用于一行运行代码的情况）

重复语句3（参照C/C++）
for ( 开始时运行代码 ; 重复条件 ; 运行后运行代码 ) {
符合重复条件运行的代码
}
```

# 函数

基本采取和主流语言一致（参照C/C++），部分特殊处理。

```cpp
均无函数声明

普通函数
函数定义1（参照C/C++）
返回类型 函数名称 (参数1（均为变量定义）, 参数2, 参数3（均可省略）) {
运行代码
return 返回值;
}

函数定义2（动态类型，参照JavaScript）
auto 函数名称 (参数1（均为变量定义）, 参数2，参数3（均可省略）) {
运行代码
return 返回值;
}
var 函数名称 (参数1（均为变量定义）, 参数2, 参数3（均可省略）) {
运行代码
return 返回值;
}

多返回值函数（参照Go）
函数定义
func 函数名称 (参数1（均为变量定义）, 参数2, 参数3（均可省略）) (返回变量1（均为变量定义）, 返回变量2（均可省略）) {
运行代码
return 返回值1, 返回值2;
}
```

# 模块

参照Python、JavaScript等语言

```python
导入模块
import 模块名称

从模块导入特定函数
from 模块名称 import 函数名称1，函数名称2（可省略）

从模块导入所有函数
from 模块名称 import *

模块设置别名
import 模块名称 as 别名
```

# 类

参照C/C++、Python和JavaScript，有修改。

```c
class 类名称 {
构造函数
类名称(参数1, 参数2（均可省略）) {
构造函数代码
}（可省略）

无析构函数

其它函数或变量定义

}

class 类名称 extends 父类名称 {
构造函数
类名称(参数1, 参数2（均可省略）) {
构造函数代码
}（可省略）

无析构函数

其它函数或变量定义

}
```

未完待续……
