# 基础语法 ## 注释 Fig 支持两种注释格式: 单行注释: ```go // 这是一个单行注释 var x = 10; // 注释可以在语句后面 ``` 多行注释: ```go /* 这是一个 多行注释 */ /* 注释内可以有 // 嵌套的单行注释 */ ``` 注释不能嵌套多个多行注释:`/* /* 嵌套 */ */` 会导致错误。 ## 变量声明 ### 可变变量 ```go var name = "Fig"; var count = 0; count = count + 1; // 可以重新赋值 ``` ### 常量 ```go const PI = 3.14159; const MAX_SIZE = 100; // PI = 3.14; // 错误:常量不能重新赋值 ``` 常量必须在声明时初始化。 ### 类型注解(可选) ```go var name: String = "Fig"; var age: Int = 14; const VERSION: Double = 0.4; ``` 类型注解提供额外的类型信息,但解释器会在运行时进行类型检查。 ## 标识符命名 ### 规则 - 可以包含字母、数字和下划线 - 不能以数字开头 - 区分大小写 - 支持 Unicode 字符 ### 有效示例 ```go var count = 0; var user_name = "Alice"; var 计数器 = 0; // 中文标识符 var π = 3.14159; // Unicode 符号 var _private = true; // 以下划线开头 ``` ### 无效示例 ``` var 123abc = 0; // 不能以数字开头 var my-var = 0; // 不能包含连字符 ``` ## 基本字面量 ### 数字 ```go // 整数 var a = 42; // 十进制 var b = -100; // 负数 var c = 0; // 零 // 浮点数 var d = 3.14; var e = 1.0; var f = -0.5; var g = 1.23e-10; // 科学计数法 ``` ### 字符串 ```go var s1 = "Hello"; var s2 = "World"; var s3 = "包含\"引号\"的字符串"; // 转义引号 var s4 = "第一行\n第二行"; // 转义换行符 ``` 多行字符串直接跨行书写: ```rust var message = "这是一个 多行字符串 可以包含多行内容"; ``` ### 布尔值 ```go var yes = true; var no = false; ``` ### 空值 ```dart var nothing = null; ``` ## 分号使用 所有语句都必须以分号结束: ```go var x = 10; // 正确 var y = 20 // 错误:缺少分号 func add(a, b) { return a + b; // return 语句需要分号 } // 函数体右花括号后不需要分号 ``` 表达式作为独立语句时也需要分号: ```go 1 + 2 * 3; // 表达式语句需要分号 io.println("test"); // 函数调用语句需要分号 ``` ## 表达式与语句 ### 表达式 表达式会产生一个值(包括 `null`): ```go 1 + 2 // 值为 3 x * y // 值为乘积 funcCall(arg) // 值为函数返回值 ``` ### 语句 语句执行操作但不产生值: ```go var x = 10; // 声明语句 if condition {} // 条件语句 return value; // 返回语句 ``` 表达式可以作为语句使用(表达式语句): ```go 1 + 2; // 计算但丢弃结果 io.println("hi"); // 函数调用作为语句 ``` ## 关键字 Fig 语言的关键字包括: | 类别 | 关键字 | | -------- | ----------------------------------------------------------- | | 声明 | `func`, `var`, `const`, `struct`, `interface`, `import` | | 控制流 | `if`, `else`, `while`, `for`, `return`, `break`, `continue` | | 错误处理 | `try`, `catch`, `throw`, `Finally` | | 逻辑运算 | `and`, `or`, `not` | | 类型相关 | `is`, `impl`, `new`, `public` | 这些关键字不能用作标识符名称。 ## 操作符 ### 算术运算符 `+`, `-`, `*`, `/`, `%`, `**`(幂运算) ### 比较运算符 `==`, `!=`, `<`, `>`, `<=`, `>=` ### 逻辑运算符 `and`, `or`, `not`, `&&`, `||`, `!` ### 位运算符 `&`, `|`, `^`, `~`, `<<`, `>>` ### 赋值运算符 `=`, `:=`, `+=`, `-=`, `*=`, `/=`, `%=`, `^=` ### 其他运算符 `.`(成员访问), `?`(三元运算), `...`(可变参数), `->`(箭头), `=>`(双箭头) ## 空白字符 Fig 对空白字符没有特殊要求: - 空格和制表符可以互换使用 - 缩进不影响程序语义 - 操作符周围的空格是可选的(但建议添加以提高可读性) ## 代码示例 ```go // 完整的程序示例 import std.io; func calculate(a: Int, b: Int) -> Int { var result = a * b; return result + 10; } const x = 5; const y = 3; var answer = calculate(x, y); io.println("结果是:" + answer.toString()); ```