From 3dca7396bb3aa5ca71beb52ba3b5c22bf30d0cf3 Mon Sep 17 00:00:00 2001 From: bQUARKz Date: Tue, 10 Mar 2026 09:51:26 +0000 Subject: [PATCH] implements PR-10.5 --- .../studio/compiler/pbs/parser/PbsParser.java | 315 +----------------- 1 file changed, 9 insertions(+), 306 deletions(-) diff --git a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/java/p/studio/compiler/pbs/parser/PbsParser.java b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/java/p/studio/compiler/pbs/parser/PbsParser.java index 5fecfb0f..71f49a92 100644 --- a/prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/java/p/studio/compiler/pbs/parser/PbsParser.java +++ b/prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/java/p/studio/compiler/pbs/parser/PbsParser.java @@ -3,21 +3,13 @@ package p.studio.compiler.pbs.parser; import p.studio.compiler.pbs.ast.PbsAst; import p.studio.compiler.pbs.lexer.PbsToken; import p.studio.compiler.pbs.lexer.PbsTokenKind; -import p.studio.compiler.source.Span; import p.studio.compiler.source.identifiers.FileId; import p.studio.utilities.structures.ReadOnlyList; -import java.util.ArrayList; - /** - * High-level manual parser for PBS source files. - * - *

This class focuses on declarations, blocks, statements, and error recovery. - * Expression precedence is delegated to {@link PbsExprParser}, while raw token - * navigation is delegated to {@link PbsTokenCursor}. + * High-level manual parser facade for PBS source files. */ public final class PbsParser { - private static final boolean REQUIRE_SEMICOLON = true; public enum ParseMode { ORDINARY, INTERFACE_MODULE @@ -25,10 +17,6 @@ public final class PbsParser { private final PbsParserContext context; private final PbsTokenCursor cursor; - private final PbsExprParser exprParser; - private final PbsAttributeParser attributeParser; - private final PbsTypeParser typeParser; - private final PbsDeclarationParser declarationParser; private final PbsTopLevelParser topLevelParser; private final PbsBlockParser blockParser; @@ -39,11 +27,14 @@ public final class PbsParser { final ParseMode parseMode) { this.context = new PbsParserContext(new PbsTokenCursor(tokens), fileId, diagnostics, parseMode); this.cursor = context.cursor(); - this.exprParser = new PbsExprParser(context, this::parseExpressionSurfaceBlock); - this.attributeParser = new PbsAttributeParser(context, this::isTopLevelRestartToken); - this.typeParser = new PbsTypeParser(context); + + final var exprParser = new PbsExprParser(context, this::parseExpressionSurfaceBlock); + final var attributeParser = new PbsAttributeParser(context, this::isTopLevelRestartToken); + final var typeParser = new PbsTypeParser(context); + this.blockParser = new PbsBlockParser(context, exprParser, typeParser); - this.declarationParser = new PbsDeclarationParser( + + final var declarationParser = new PbsDeclarationParser( context, exprParser, attributeParser, @@ -54,9 +45,6 @@ public final class PbsParser { this.topLevelParser = new PbsTopLevelParser(context, attributeParser, declarationParser); } - /** - * Parses a token stream into a PBS file AST. - */ public static PbsAst.File parse( final ReadOnlyList tokens, final FileId fileId, @@ -72,253 +60,14 @@ public final class PbsParser { return new PbsParser(tokens, fileId, diagnostics, parseMode).parseFile(); } - /** - * Parses a full file as a sequence of imports and top-level declarations. - */ private PbsAst.File parseFile() { return topLevelParser.parseFile(); } - /** - * Parses import syntax and stores it in the AST. - */ - private PbsAst.ImportDecl parseImport(final PbsToken importToken) { - return declarationParser.parseImport(importToken); - } - - /** - * Parses a module reference such as {@code @core:math/tools}. - */ - private PbsAst.ModuleRef parseModuleRef() { - return declarationParser.parseModuleRef(); - } - - /** - * Parses declarations introduced by 'declare'. - */ - private PbsAst.TopDecl parseDeclareTopDecl( - final PbsToken declareToken, - final ReadOnlyList pendingAttributes) { - return declarationParser.parseDeclareTopDecl(declareToken, pendingAttributes); - } - - private PbsAst.HostDecl parseHostDeclaration(final PbsToken declareToken) { - throw new UnsupportedOperationException(); - } - - private PbsAst.BuiltinTypeDecl parseBuiltinTypeDeclaration( - final PbsToken declareToken, - final ReadOnlyList declarationAttributes) { - throw new UnsupportedOperationException(); - } - - private ArrayList parseBuiltinTypeFields() { - throw new UnsupportedOperationException(); - } - - private void rejectAttributesBeforeUnsupportedTopDecl( - final ReadOnlyList attributes, - final String targetSurface) { - throw new UnsupportedOperationException(); - } - - private void reportAttributesNotAllowed( - final ReadOnlyList attributes, - final String message) { - throw new UnsupportedOperationException(); - } - - private boolean isNotInterfaceMode() { - throw new UnsupportedOperationException(); - } - - private boolean isOrdinaryMode() { - throw new UnsupportedOperationException(); - } - - private PbsAst.StructDecl parseStructDeclaration(final PbsToken declareToken) { - throw new UnsupportedOperationException(); - } - - private ArrayList parseStructFields() { - throw new UnsupportedOperationException(); - } - - private ReadOnlyList parseAttributeList() { - return attributeParser.parseAttributeList(); - } - - private StructBodyParse parseStructBodyAndConsumeRightBrace(final PbsToken leftBrace) { - throw new UnsupportedOperationException(); - } - - private PbsAst.CtorDecl parseCtorDeclarationInBody(final PbsToken ctorToken) { - throw new UnsupportedOperationException(); - } - - private PbsAst.ContractDecl parseContractDeclaration(final PbsToken declareToken) { - throw new UnsupportedOperationException(); - } - - private PbsAst.ServiceDecl parseServiceDeclaration(final PbsToken declareToken) { - throw new UnsupportedOperationException(); - } - - private PbsAst.ErrorDecl parseErrorDeclaration(final PbsToken declareToken) { - throw new UnsupportedOperationException(); - } - - private PbsAst.EnumDecl parseEnumDeclaration(final PbsToken declareToken) { - throw new UnsupportedOperationException(); - } - - /** - * Parses a top-level function declaration. - */ - private PbsAst.FunctionDecl parseFunction(final PbsToken fnToken) { - return declarationParser.parseFunction(fnToken); - } - - private PbsAst.FunctionDecl parseFunctionLike(final PbsToken fnToken) { - throw new UnsupportedOperationException(); - } - - private PbsAst.FunctionSignature parseFunctionSignature( - final PbsToken fnToken, - final ReadOnlyList attributes) { - throw new UnsupportedOperationException(); - } - - private PbsToken consumeCallableName() { - throw new UnsupportedOperationException(); - } - - /** - * Parses `declare callback` declaration. - */ - private PbsAst.CallbackDecl parseCallbackDeclaration(final PbsToken declareToken) { - throw new UnsupportedOperationException(); - } - - /** - * Parses `declare const` declaration. - */ - private PbsAst.ConstDecl parseConstDeclaration( - final PbsToken declareToken, - final ReadOnlyList attributes) { - throw new UnsupportedOperationException(); - } - - /** - * Parses `implements Contract for Owner using binder { ... }`. - */ - private PbsAst.ImplementsDecl parseImplementsDeclaration(final PbsToken implementsToken) { - return declarationParser.parseImplementsDeclaration(implementsToken); - } - - private ArrayList parseParametersUntilRightParen() { - return typeParser.parseParametersUntilRightParen(); - } - - private PbsTypeParser.ParsedReturnSpec parseCallableReturnSpec(final PbsToken anchorToken) { - return typeParser.parseCallableReturnSpec(anchorToken); - } - - private PbsAst.TypeRef parseTypeRef() { - return typeParser.parseTypeRef(); - } - - /** - * Parses a brace-delimited block. - */ - private PbsAst.Block parseBlock() { - return blockParser.parseBlock(); - } - private PbsAst.Block parseExpressionSurfaceBlock(final String message) { return blockParser.parseBlock(message); } - private PbsAst.Block parseBlock(final String message) { - return blockParser.parseBlock(message); - } - - private boolean startsStructuredStatement() { - throw new UnsupportedOperationException(); - } - - /** - * Parses one statement inside a block. - */ - private PbsAst.Statement parseStatement() { - throw new UnsupportedOperationException(); - } - - /** - * Parses a local binding statement. - */ - private PbsAst.Statement parseLetStatement(final PbsToken letToken) { - throw new UnsupportedOperationException(); - } - - private PbsAst.Statement parseAssignStatement() { - throw new UnsupportedOperationException(); - } - - private PbsAst.LValue parseLValue() { - throw new UnsupportedOperationException(); - } - - private PbsToken consumeAssignOperator() { - throw new UnsupportedOperationException(); - } - - private PbsAst.AssignOperator parseAssignOperator(final PbsToken token) { - throw new UnsupportedOperationException(); - } - - private PbsAst.IfStatement parseIfStatement(final PbsToken ifToken) { - throw new UnsupportedOperationException(); - } - - private PbsAst.Statement parseForStatement(final PbsToken forToken) { - throw new UnsupportedOperationException(); - } - - private PbsToken consumeForToken(final PbsTokenKind kind, final String message) { - throw new UnsupportedOperationException(); - } - - private PbsAst.Statement parseWhileStatement(final PbsToken whileToken) { - throw new UnsupportedOperationException(); - } - - private PbsAst.Statement parseBreakStatement(final PbsToken breakToken) { - throw new UnsupportedOperationException(); - } - - private PbsAst.Statement parseContinueStatement(final PbsToken continueToken) { - throw new UnsupportedOperationException(); - } - - /** - * Parses a return statement with an optional returned value. - */ - private PbsAst.Statement parseReturnStatement(final PbsToken returnToken) { - throw new UnsupportedOperationException(); - } - - /** - * Parses an expression statement terminated by a semicolon. - */ - private PbsAst.Statement parseExpressionStatement() { - throw new UnsupportedOperationException(); - } - - private boolean isAssignmentStatementStart() { - throw new UnsupportedOperationException(); - } - private long consumeDeclarationTerminator() { var end = cursor.previous().end(); var parenDepth = 0; @@ -355,14 +104,11 @@ public final class PbsParser { } } if (depth > 0) { - report(cursor.peek(), ParseErrors.E_PARSE_EXPECTED_TOKEN, "Expected '}' to close declaration body"); + context.report(cursor.peek(), ParseErrors.E_PARSE_EXPECTED_TOKEN, "Expected '}' to close declaration body"); } return end; } - /** - * Skips tokens until a safe top-level restart point is reached. - */ private void synchronizeTopLevel() { while (!cursor.isAtEnd()) { if (isTopLevelRestartToken(cursor.peek().kind())) { @@ -382,47 +128,4 @@ public final class PbsParser { || kind == PbsTokenKind.IMPLEMENTS || kind == PbsTokenKind.LEFT_BRACKET; } - - /** - * Consumes a required token and reports an error if it is missing. - */ - private PbsToken consume(final PbsTokenKind kind, final String message) { - if (cursor.check(kind)) { - return cursor.advance(); - } - final var token = cursor.peek(); - report(token, ParseErrors.E_PARSE_EXPECTED_TOKEN, message + ", found " + token.kind()); - if (!cursor.isAtEnd()) { - return cursor.advance(); - } - return token; - } - - private Long parseLongOrNull(final String text) { - try { - return Long.parseLong(text); - } catch (NumberFormatException ignored) { - return null; - } - } - - /** - * Builds a source span for the current file. - */ - private Span span(final long start, final long end) { - return context.span(start, end); - } - - /** - * Reports a parser diagnostic at the given token span. - */ - private void report(final PbsToken token, final ParseErrors parseErrors, final String message) { - context.report(token, parseErrors, message); - } - - private record StructBodyParse( - ReadOnlyList methods, - ReadOnlyList ctors, - long end) { - } }