From 22c7ec46f88180bc9a6d193e4656fd906ebb1ca8 Mon Sep 17 00:00:00 2001 From: zhangxun <1958638841@qq.com> Date: Sat, 28 Jun 2025 10:20:11 +0800 Subject: [PATCH 01/37] =?UTF-8?q?style:=20TokenStream.isAtEnd=20=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=80=BC=E7=AC=A6=E5=90=88=E6=96=87=E6=A1=A3=E8=AF=B4?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/jcnc/snow/compiler/parser/context/TokenStream.java | 2 +- .../org/jcnc/snow/compiler/parser/core/ParserEngine.java | 6 +++--- .../compiler/parser/expression/PrattExpressionParser.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/jcnc/snow/compiler/parser/context/TokenStream.java b/src/main/java/org/jcnc/snow/compiler/parser/context/TokenStream.java index 5841b7b..2788300 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/context/TokenStream.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/context/TokenStream.java @@ -120,7 +120,7 @@ public class TokenStream { * @return 若当前位置 Token 为 EOF,则返回 true,否则 false */ public boolean isAtEnd() { - return peek().getType() != TokenType.EOF; + return peek().getType() == TokenType.EOF; } diff --git a/src/main/java/org/jcnc/snow/compiler/parser/core/ParserEngine.java b/src/main/java/org/jcnc/snow/compiler/parser/core/ParserEngine.java index 7d0854f..14dc783 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/core/ParserEngine.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/core/ParserEngine.java @@ -17,7 +17,7 @@ public record ParserEngine(ParserContext ctx) { List errs = new ArrayList<>(); TokenStream ts = ctx.getTokens(); - while (ts.isAtEnd()) { + while (!ts.isAtEnd()) { // 跳过空行 if (ts.peek().getType() == TokenType.NEWLINE) { ts.next(); @@ -46,7 +46,7 @@ public record ParserEngine(ParserContext ctx) { * 错误同步:跳到下一行或下一个已注册顶层关键字 */ private void synchronize(TokenStream ts) { - while (ts.isAtEnd()) { + while (!ts.isAtEnd()) { if (ts.peek().getType() == TokenType.NEWLINE) { ts.next(); break; @@ -57,7 +57,7 @@ public record ParserEngine(ParserContext ctx) { ts.next(); } // 连续空行全部吃掉 - while (ts.isAtEnd() && ts.peek().getType() == TokenType.NEWLINE) { + while (!ts.isAtEnd() && ts.peek().getType() == TokenType.NEWLINE) { ts.next(); } } diff --git a/src/main/java/org/jcnc/snow/compiler/parser/expression/PrattExpressionParser.java b/src/main/java/org/jcnc/snow/compiler/parser/expression/PrattExpressionParser.java index 4f79274..c5529d4 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/expression/PrattExpressionParser.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/expression/PrattExpressionParser.java @@ -92,7 +92,7 @@ public class PrattExpressionParser implements ExpressionParser { ExpressionNode left = prefix.parse(ctx, token); - while (ctx.getTokens().isAtEnd() + while (!ctx.getTokens().isAtEnd() && prec.ordinal() < nextPrecedence(ctx)) { String lex = ctx.getTokens().peek().getLexeme(); InfixParselet infix = infixes.get(lex); From 0d8e26d2cceb284cf99fd169238f595bcc1d7c55 Mon Sep 17 00:00:00 2001 From: Luke Date: Sun, 29 Jun 2025 18:23:58 +0800 Subject: [PATCH 02/37] =?UTF-8?q?chore:=20=E5=A2=9E=E5=8A=A0=20Demo11=20?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .run/Demo11.run.xml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .run/Demo11.run.xml diff --git a/.run/Demo11.run.xml b/.run/Demo11.run.xml new file mode 100644 index 0000000..e6748fb --- /dev/null +++ b/.run/Demo11.run.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file From 5e0d31f3adc325e701664e28d10ee3a3d998d138 Mon Sep 17 00:00:00 2001 From: Luke Date: Sun, 29 Jun 2025 18:24:34 +0800 Subject: [PATCH 03/37] =?UTF-8?q?test:=20=E5=A2=9E=E5=8A=A0=20Bug1=20?= =?UTF-8?q?=E8=87=B3=20BugFarm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- playground/BugFarm/Bug1/Main.snow | 7 +++++++ playground/BugFarm/Bug1/README.md | 12 ++++++++++++ playground/Demo11/Main.snow | 7 +++++++ 3 files changed, 26 insertions(+) create mode 100644 playground/BugFarm/Bug1/Main.snow create mode 100644 playground/BugFarm/Bug1/README.md create mode 100644 playground/Demo11/Main.snow diff --git a/playground/BugFarm/Bug1/Main.snow b/playground/BugFarm/Bug1/Main.snow new file mode 100644 index 0000000..d9a3e6e --- /dev/null +++ b/playground/BugFarm/Bug1/Main.snow @@ -0,0 +1,7 @@ +function: main + return_type: int + body: + 3 L + return 65537 + end body +end function \ No newline at end of file diff --git a/playground/BugFarm/Bug1/README.md b/playground/BugFarm/Bug1/README.md new file mode 100644 index 0000000..b34d14d --- /dev/null +++ b/playground/BugFarm/Bug1/README.md @@ -0,0 +1,12 @@ +## 编译器输出 +### Snow 源代码 +#### Main.snow +```snow +function: main + return_type: int + body: + 3 L + return 65537 + end body +end function +``` \ No newline at end of file diff --git a/playground/Demo11/Main.snow b/playground/Demo11/Main.snow new file mode 100644 index 0000000..d9a3e6e --- /dev/null +++ b/playground/Demo11/Main.snow @@ -0,0 +1,7 @@ +function: main + return_type: int + body: + 3 L + return 65537 + end body +end function \ No newline at end of file From cb4faf0632fb351d4b8dca7fd29fdaa204462cf6 Mon Sep 17 00:00:00 2001 From: Luke Date: Sun, 29 Jun 2025 18:28:43 +0800 Subject: [PATCH 04/37] =?UTF-8?q?chore:=20=E5=A2=9E=E5=8A=A0=20Bug1=20?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .run/Bug1.run.xml | 17 +++++++++++++++++ .run/Demo1.run.xml | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 .run/Bug1.run.xml diff --git a/.run/Bug1.run.xml b/.run/Bug1.run.xml new file mode 100644 index 0000000..46f5bc6 --- /dev/null +++ b/.run/Bug1.run.xml @@ -0,0 +1,17 @@ + + + + \ No newline at end of file diff --git a/.run/Demo1.run.xml b/.run/Demo1.run.xml index 867e2f7..55005c8 100644 --- a/.run/Demo1.run.xml +++ b/.run/Demo1.run.xml @@ -3,7 +3,7 @@