diff --git a/README.md b/README.md index cd31809..da8a7f2 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ Snow 语言受到 LLM 驱动代码生成趋势的启发,强调简单而清晰的 ## 相关文档 [Snow-Lang 指南](docs/Snow-Lang-Syntax/Snow-Lang-Syntax.md) -[Snow-Lang 语法规范](docs/Snow-Lang-Syntax/Snow-Lang-Grammar-Specification) +[Snow-Lang 语法规范](docs/Snow-Lang-Syntax/Snow-Lang-Grammar-Specification.md) [Git 管理规范](docs/Snow-Lang-Git-Management/Snow-Lang-Git-Management.md) diff --git a/docs/Snow-Lang-Syntax/Snow-Lang-Grammar-Specification.md b/docs/Snow-Lang-Syntax/Snow-Lang-Grammar-Specification.md index d8a816a..64d2af4 100644 --- a/docs/Snow-Lang-Syntax/Snow-Lang-Grammar-Specification.md +++ b/docs/Snow-Lang-Syntax/Snow-Lang-Grammar-Specification.md @@ -321,10 +321,8 @@ Snow-Lang 支持下列**数值类型**,用于声明变量、参数、结构体 |----|--------|----------| | b | byte | 7b, -2B | | s | short | 123s | -| i | int | 100i | | l | long | 5l, 123L | | f | float | 3.14f | -| d | double | 1.0d | - 没有后缀的整数字面量自动为 `int`。 - 没有后缀的浮点字面量自动为 `double`。 diff --git a/playground/Demo/Demo13/Main.snow b/playground/Demo/Demo13/Main.snow index dee7b5b..7b6479b 100644 --- a/playground/Demo/Demo13/Main.snow +++ b/playground/Demo/Demo13/Main.snow @@ -7,34 +7,34 @@ module: Main 5 == 7b 5 == 7l 5 == 7f - 5 == 7d + 5 == 7.0 5b == 5b 5b == 5s 5b == 5l 5b == 5f - 5b == 5d + 5b == 5.0 5s == 5s 5s == 5l 5s == 5f - 5s == 5d + 5s == 5.0 5l == 5l 5l == 5f - 5l == 5d + 5l == 5.0 5f == 5f - 5f == 5d + 5f == 5.0 - 5d == 5d + 5.0 == 5.0 declare b: byte = 8b declare s: short = 8s declare i: int = 8 declare l: long = 8l declare f: float = 8f - declare d: double = 8d + declare d: double = 8 b == b b == s diff --git a/src/main/java/org/jcnc/snow/compiler/lexer/scanners/NumberTokenScanner.java b/src/main/java/org/jcnc/snow/compiler/lexer/scanners/NumberTokenScanner.java index c655595..7cd0894 100644 --- a/src/main/java/org/jcnc/snow/compiler/lexer/scanners/NumberTokenScanner.java +++ b/src/main/java/org/jcnc/snow/compiler/lexer/scanners/NumberTokenScanner.java @@ -42,7 +42,7 @@ import org.jcnc.snow.compiler.lexer.token.TokenType; *
  • 小数点后缺失数字(如 1.)—— 抛出 LexicalException
  • * *

    - * 支持的单字符类型后缀包括: b, s, l, f, d 及其大写形式。若需支持多字符后缀,可将该集合扩展为 Set。 + * 支持的单字符类型后缀包括: b, s, l, f 及其大写形式。若需支持多字符后缀,可将该集合扩展为 Set。 */ public class NumberTokenScanner extends AbstractTokenScanner { @@ -51,7 +51,7 @@ public class NumberTokenScanner extends AbstractTokenScanner { * 包含: b, s, l, f, d 及其大写形式。 * 对于多字符后缀,可扩展为 Set 并在扫描尾部做贪婪匹配。 */ - private static final String SUFFIX_CHARS = "bslfdBSLFD"; + private static final String SUFFIX_CHARS = "bslfBSLF"; /** * 判断是否由该扫描器处理。 @@ -177,8 +177,10 @@ public class NumberTokenScanner extends AbstractTokenScanner { /* 2-B. **非法字母**(既不是后缀,也没有空白隔开) */ } else if (Character.isLetter(next)) { + var its = new IdentifierTokenScanner(); + var token = its.scanToken(ctx, line, col); throw new LexicalException( - "数字后不能紧跟未知标识符 '" + next + "'", line, col); + "数字后不能紧跟未知标识符 '" + token.getLexeme() + "'", line, col); /* 2-C. **非法下划线** */ } else if (next == '_') { throw new LexicalException(