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()` を実行する |