NaifyView\Dialect\Naify\NaifyParser クラス

NaifyParser — Native template source を AST 化する parser

tokenizer と directive parser 群を束ね、control / include / layout / macro / loop を Node に変換する。 syntax contract 違反は NaifyViewException として source span 付きで返す。

使用例

$parser = new NaifyParser();
$document = $parser->parseSource($source, 'index.html');

プロパティ

名前型説明
private $tokenizer NaifyTokenizer tokenizer owner
private $directiveSurface NaifyDirectiveSurface directive / HTML surface classifier
private $sourceSyntaxPreflight NaifySourceSyntaxPreflight source-level syntax preflight
private $expressionSurfacePreflight NaifyExpressionSurfacePreflight expression preflight contract owner
private $loopExpressionParser NaifyLoopExpressionParser loop exp parser
private $templatePrologStripper NaifyTemplatePrologStripper template prolog metadata stripper
private $loopExpressionInspector NaifyLoopExpressionInspector named loop contract inspector
private $layoutContractGuard NaifyLayoutContractGuard layout / slot contract guard
private $definitionConflictGuard NaifyDefinitionConflictGuard duplicate definition guard
private $nameContractGuard NaifyNameContractGuard name contract guard
private $rootDirectivePlacementGuard NaifyRootDirectivePlacementGuard root metadata placement contract
private $exceptionFactory NaifyParserExceptionFactory parser error payload / hint owner
private $tokenStream NaifyParserTokenStream token cursor state owner
private $directiveTokenReader NaifyDirectiveTokenReader directive token reader
private $elementParser NaifyElementParser generic element parser helper
private $structuralDirectiveParser NaifyStructuralDirectiveParser block/layout/slot/macro parser helper
private $stateDirectiveParser NaifyStateDirectiveParser set/capture/raw/loop-control parser helper
private $controlDirectiveParser NaifyControlDirectiveParser if/loop/include/extends parser helper
private $containerDepth int 現在 parse 中の container depth。document root は 0
private $loopDepth int 現在 parse 中の loop depth。loop control の配置検証に使う
private $layoutScopeStack array 現在入っている layout scope stack。define/use を積む
private $currentTemplatePath ?string 現在 parse 中の template path
private $currentSource string 現在 parse 中の normalized source

メソッド

メソッド説明
public __construct(?NaifyTokenizer $tokenizer): void インスタンスを初期化する
public normalizeSource(string $source): string `normalizeSource()` を実行する
public parseSource(string $source, ?string $templatePath): DocumentNode `parseSource()` を実行する
public parseTokens(array $tokens): DocumentNode `parseTokens()` を実行する
private parseNodes(callable $shouldStop): array `parseNodes()` を実行する
private parseElementNode(): ElementNode `parseElementNode()` を実行する
private parseIfNode(): IfNode `parseIfNode()` を実行する
private parseForEachNode(): ForEachNode `parseForEachNode()` を実行する
private parseForRangeNode(): ForRangeNode `parseForRangeNode()` を実行する
private parseIncludeNode(): IncludeNode `parseIncludeNode()` を実行する
private parseExtendsNode(): ExtendsNode `parseExtendsNode()` を実行する
private parseBlockNode(): BlockNode `parseBlockNode()` を実行する
private parseLayoutNode(): LayoutNode `parseLayoutNode()` を実行する
private parseSetNode(): SetNode `parseSetNode()` を実行する
private parseCaptureNode(): CaptureNode `parseCaptureNode()` を実行する
private parseBreakNode(): BreakNode `parseBreakNode()` を実行する
private parseContinueNode(): ContinueNode `parseContinueNode()` を実行する
private parseSlotNode(): SlotNode `parseSlotNode()` を実行する
private parseMacroNode(): MacroNode `parseMacroNode()` を実行する
private parseCommentNode(): CommentNode `parseCommentNode()` を実行する
private parseLiteralNode(): LiteralNode `parseLiteralNode()` を実行する
private parseMacroArguments(string $arguments, Token $token): array `parseMacroArguments()` を実行する
private parseLayoutScopedNodes(string $layoutMode, callable $shouldStop): array `parseLayoutScopedNodes()` を実行する
private parseLoopScopedNodes(callable $shouldStop): array `parseLoopScopedNodes()` を実行する
private readOptionalIdentifierAttribute(Token $token, string $attributeName, string $messagePrefix, string $errorCode, string $messageKey): ?string `readOptionalIdentifierAttribute()` を実行する
private readRequiredIdentifierAttribute(Token $token, string $attributeName, string $missingMessage, string $invalidMessagePrefix, string $missingErrorCode, string $missingMessageKey, string $invalidErrorCode, string $invalidMessageKey): string `readRequiredIdentifierAttribute()` を実行する
private assertSlotPlacement(Token $token): void `assertSlotPlacement()` を実行する
private normalizeExpressionSurface(string $expression, ?Token $token, string $label): string `normalizeExpressionSurface()` を実行する
private assertReservedExpressionOperators(string $expression, ?Token $token, string $label): void `assertReservedExpressionOperators()` を実行する
private parseNestedNodes(callable $shouldStop): array `parseNestedNodes()` を実行する
private assertUnsupportedSurfaceShorthands(string $normalizedSource): void `assertUnsupportedSurfaceShorthands()` を実行する
private assertRootDirectivePlacement(Token $token): void `assertRootDirectivePlacement()` を実行する
private assertLayoutMode(?string $defineName, ?string $useName, Token $openToken): void `assertLayoutMode()` を実行する
private assertLayoutModePresence(?string $defineName, ?string $useName, Token $openToken): void `assertLayoutModePresence()` を実行する
private assertLayoutNameContract(?string $name, string $attributeName, Token $openToken): void `assertLayoutNameContract()` を実行する
private assertLayoutUseSource(?string $useName, ?string $source, Token $openToken): void `assertLayoutUseSource()` を実行する
private assertLayoutUseChildren(?string $useName, array $children): void `assertLayoutUseChildren()` を実行する
private assertUniqueLayoutUseSlotNames(?string $useName, array $children): void `assertUniqueLayoutUseSlotNames()` を実行する
private assertUniqueLayoutDefineSlotNames(?string $defineName, array $children): void `assertUniqueLayoutDefineSlotNames()` を実行する
private assertRootDefinitionContracts(array $children): void `assertRootDefinitionContracts()` を実行する
private currentToken(): ?Token `currentToken()` を実行する
private consumeToken(): ?Token `consumeToken()` を実行する
private consumeVoidDirectiveToken(string $name): Token `consumeVoidDirectiveToken()` を実行する
private consumeRawDirectiveClose(string $name, string $rawBody): Token `consumeRawDirectiveClose()` を実行する
private buildDocumentSpan(): SourceSpan `buildDocumentSpan()` を実行する
private mergeSpan(SourceSpan $start, SourceSpan $end): SourceSpan `mergeSpan()` を実行する
private buildParserException(string $message, string $errorCode, string $messageKey, ?Token $token, array $payload = '...'): NaifyViewException `buildParserException()` を実行する
private buildParserSpanException(string $message, string $errorCode, string $messageKey, SourceSpan $span, array $payload = '...'): NaifyViewException `buildParserSpanException()` を実行する