From fd38c94b3d08dd242cd8932aee8ac147dd0c110a Mon Sep 17 00:00:00 2001 From: Luke Date: Sun, 27 Apr 2025 11:18:46 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E6=9E=90=E5=99=A8=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=94=BE=E5=88=B0base=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../compiler/parser/expression/BinaryOperatorParselet.java | 1 + .../org/jcnc/snow/compiler/parser/expression/CallParselet.java | 1 + .../jcnc/snow/compiler/parser/expression/GroupingParselet.java | 1 + .../snow/compiler/parser/expression/IdentifierParselet.java | 1 + .../jcnc/snow/compiler/parser/expression/MemberParselet.java | 1 + .../snow/compiler/parser/expression/NumberLiteralParselet.java | 1 + .../snow/compiler/parser/expression/PrattExpressionParser.java | 3 +++ .../snow/compiler/parser/expression/StringLiteralParselet.java | 1 + .../parser/expression/{ => base}/ExpressionParser.java | 2 +- .../compiler/parser/expression/{ => base}/InfixParselet.java | 3 ++- .../compiler/parser/expression/{ => base}/PrefixParselet.java | 2 +- 11 files changed, 14 insertions(+), 3 deletions(-) rename src/main/java/org/jcnc/snow/compiler/parser/expression/{ => base}/ExpressionParser.java (91%) rename src/main/java/org/jcnc/snow/compiler/parser/expression/{ => base}/InfixParselet.java (88%) rename src/main/java/org/jcnc/snow/compiler/parser/expression/{ => base}/PrefixParselet.java (92%) diff --git a/src/main/java/org/jcnc/snow/compiler/parser/expression/BinaryOperatorParselet.java b/src/main/java/org/jcnc/snow/compiler/parser/expression/BinaryOperatorParselet.java index 1804c74..4e37923 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/expression/BinaryOperatorParselet.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/expression/BinaryOperatorParselet.java @@ -4,6 +4,7 @@ import org.jcnc.snow.compiler.parser.ast.BinaryExpressionNode; import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode; import org.jcnc.snow.compiler.lexer.token.Token; import org.jcnc.snow.compiler.parser.context.ParserContext; +import org.jcnc.snow.compiler.parser.expression.base.InfixParselet; /** * 表示中缀二元运算符的解析规则(parselet),用于解析如 {@code a + b} 的表达式结构。 diff --git a/src/main/java/org/jcnc/snow/compiler/parser/expression/CallParselet.java b/src/main/java/org/jcnc/snow/compiler/parser/expression/CallParselet.java index 26b70a0..cc1f554 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/expression/CallParselet.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/expression/CallParselet.java @@ -3,6 +3,7 @@ package org.jcnc.snow.compiler.parser.expression; import org.jcnc.snow.compiler.parser.ast.CallExpressionNode; import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode; import org.jcnc.snow.compiler.parser.context.ParserContext; +import org.jcnc.snow.compiler.parser.expression.base.InfixParselet; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/org/jcnc/snow/compiler/parser/expression/GroupingParselet.java b/src/main/java/org/jcnc/snow/compiler/parser/expression/GroupingParselet.java index d270944..c13fdb7 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/expression/GroupingParselet.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/expression/GroupingParselet.java @@ -3,6 +3,7 @@ package org.jcnc.snow.compiler.parser.expression; import org.jcnc.snow.compiler.lexer.token.Token; import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode; import org.jcnc.snow.compiler.parser.context.ParserContext; +import org.jcnc.snow.compiler.parser.expression.base.PrefixParselet; /** * 解析圆括号包裹的表达式,例如 {@code (a + b)}。 diff --git a/src/main/java/org/jcnc/snow/compiler/parser/expression/IdentifierParselet.java b/src/main/java/org/jcnc/snow/compiler/parser/expression/IdentifierParselet.java index d088f4d..104801a 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/expression/IdentifierParselet.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/expression/IdentifierParselet.java @@ -4,6 +4,7 @@ import org.jcnc.snow.compiler.lexer.token.Token; import org.jcnc.snow.compiler.parser.ast.IdentifierNode; import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode; import org.jcnc.snow.compiler.parser.context.ParserContext; +import org.jcnc.snow.compiler.parser.expression.base.PrefixParselet; /** * 用于解析标识符(identifier)的前缀解析器。 diff --git a/src/main/java/org/jcnc/snow/compiler/parser/expression/MemberParselet.java b/src/main/java/org/jcnc/snow/compiler/parser/expression/MemberParselet.java index 739cb01..8ac9dd9 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/expression/MemberParselet.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/expression/MemberParselet.java @@ -5,6 +5,7 @@ import org.jcnc.snow.compiler.parser.ast.MemberExpressionNode; import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode; import org.jcnc.snow.compiler.parser.context.ParserContext; import org.jcnc.snow.compiler.parser.context.TokenStream; +import org.jcnc.snow.compiler.parser.expression.base.InfixParselet; /** * 用于解析成员访问表达式的中缀解析器,例如 {@code object.property}。 diff --git a/src/main/java/org/jcnc/snow/compiler/parser/expression/NumberLiteralParselet.java b/src/main/java/org/jcnc/snow/compiler/parser/expression/NumberLiteralParselet.java index 17af94b..fa549d2 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/expression/NumberLiteralParselet.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/expression/NumberLiteralParselet.java @@ -4,6 +4,7 @@ import org.jcnc.snow.compiler.lexer.token.Token; import org.jcnc.snow.compiler.parser.ast.NumberLiteralNode; import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode; import org.jcnc.snow.compiler.parser.context.ParserContext; +import org.jcnc.snow.compiler.parser.expression.base.PrefixParselet; /** * 用于解析数字字面量的前缀解析器。 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 386eb0b..ffbf43c 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 @@ -4,6 +4,9 @@ import org.jcnc.snow.compiler.lexer.token.Token; import org.jcnc.snow.compiler.lexer.token.TokenType; import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode; import org.jcnc.snow.compiler.parser.context.ParserContext; +import org.jcnc.snow.compiler.parser.expression.base.ExpressionParser; +import org.jcnc.snow.compiler.parser.expression.base.InfixParselet; +import org.jcnc.snow.compiler.parser.expression.base.PrefixParselet; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/org/jcnc/snow/compiler/parser/expression/StringLiteralParselet.java b/src/main/java/org/jcnc/snow/compiler/parser/expression/StringLiteralParselet.java index a64ad55..3920dce 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/expression/StringLiteralParselet.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/expression/StringLiteralParselet.java @@ -4,6 +4,7 @@ import org.jcnc.snow.compiler.lexer.token.Token; import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode; import org.jcnc.snow.compiler.parser.ast.StringLiteralNode; import org.jcnc.snow.compiler.parser.context.ParserContext; +import org.jcnc.snow.compiler.parser.expression.base.PrefixParselet; /** * 用于解析字符串字面量的前缀解析器。 diff --git a/src/main/java/org/jcnc/snow/compiler/parser/expression/ExpressionParser.java b/src/main/java/org/jcnc/snow/compiler/parser/expression/base/ExpressionParser.java similarity index 91% rename from src/main/java/org/jcnc/snow/compiler/parser/expression/ExpressionParser.java rename to src/main/java/org/jcnc/snow/compiler/parser/expression/base/ExpressionParser.java index c90cb8c..e914bb9 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/expression/ExpressionParser.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/expression/base/ExpressionParser.java @@ -1,4 +1,4 @@ -package org.jcnc.snow.compiler.parser.expression; +package org.jcnc.snow.compiler.parser.expression.base; import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode; import org.jcnc.snow.compiler.parser.context.ParserContext; diff --git a/src/main/java/org/jcnc/snow/compiler/parser/expression/InfixParselet.java b/src/main/java/org/jcnc/snow/compiler/parser/expression/base/InfixParselet.java similarity index 88% rename from src/main/java/org/jcnc/snow/compiler/parser/expression/InfixParselet.java rename to src/main/java/org/jcnc/snow/compiler/parser/expression/base/InfixParselet.java index 43547e6..26d4a6a 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/expression/InfixParselet.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/expression/base/InfixParselet.java @@ -1,7 +1,8 @@ -package org.jcnc.snow.compiler.parser.expression; +package org.jcnc.snow.compiler.parser.expression.base; import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode; import org.jcnc.snow.compiler.parser.context.ParserContext; +import org.jcnc.snow.compiler.parser.expression.Precedence; /** * 中缀解析器接口(InfixParselet),用于处理中缀表达式的解析逻辑。 diff --git a/src/main/java/org/jcnc/snow/compiler/parser/expression/PrefixParselet.java b/src/main/java/org/jcnc/snow/compiler/parser/expression/base/PrefixParselet.java similarity index 92% rename from src/main/java/org/jcnc/snow/compiler/parser/expression/PrefixParselet.java rename to src/main/java/org/jcnc/snow/compiler/parser/expression/base/PrefixParselet.java index 1e6dc9b..b3b04d0 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/expression/PrefixParselet.java +++ b/src/main/java/org/jcnc/snow/compiler/parser/expression/base/PrefixParselet.java @@ -1,4 +1,4 @@ -package org.jcnc.snow.compiler.parser.expression; +package org.jcnc.snow.compiler.parser.expression.base; import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode; import org.jcnc.snow.compiler.parser.context.ParserContext;