forked from Misaki/GhostEngine
- Major optimization of Ghost.RenderGraph.Concept: pooled resources, zero-allocation hot paths, explicit queue types, and batch barrier APIs. - Migrated Ghost.DSL shader compiler to ANTLR4-based parser; removed hand-written parser, added grammar files and semantic model conversion. - Added CollectionPool/ListPool for pooled list management. - Updated documentation for new architecture and performance. - Removed Ghost.Shader.Concept (material/material system) from repo and solution. - README.md replaced with a brief project statement.
95 lines
1.7 KiB
ANTLR
95 lines
1.7 KiB
ANTLR
parser grammar GhostShaderParser;
|
|
|
|
options {
|
|
tokenVocab = GhostShaderLexer;
|
|
}
|
|
|
|
// Top-level rule
|
|
shaderFile: shader+ EOF;
|
|
|
|
shader:
|
|
SHADER STRING_LITERAL LBRACE
|
|
shaderBody
|
|
RBRACE;
|
|
|
|
shaderBody:
|
|
(propertiesBlock | pipelineBlock | passBlock | functionCall)*;
|
|
|
|
// Properties block
|
|
propertiesBlock:
|
|
PROPERTIES LBRACE
|
|
propertyDeclaration*
|
|
RBRACE;
|
|
|
|
propertyDeclaration:
|
|
scope? IDENTIFIER IDENTIFIER (EQUALS LBRACE propertyInitializer RBRACE)? SEMICOLON;
|
|
|
|
scope:
|
|
GLOBAL | LOCAL;
|
|
|
|
propertyInitializer:
|
|
(NUMBER | IDENTIFIER) (COMMA (NUMBER | IDENTIFIER))*;
|
|
|
|
// Pipeline block
|
|
pipelineBlock:
|
|
PIPELINE LBRACE
|
|
pipelineStatement*
|
|
RBRACE;
|
|
|
|
pipelineStatement:
|
|
IDENTIFIER EQUALS IDENTIFIER SEMICOLON;
|
|
|
|
// Pass block
|
|
passBlock:
|
|
PASS STRING_LITERAL LBRACE
|
|
passBody
|
|
RBRACE;
|
|
|
|
// Template
|
|
passBody:
|
|
(definesBlock | includesBlock | keywordsBlock | pipelineBlock | hlslBlock | shaderEntry)*;
|
|
|
|
definesBlock:
|
|
DEFINES LBRACE
|
|
defineStatement*
|
|
RBRACE;
|
|
|
|
defineStatement:
|
|
IDENTIFIER SEMICOLON;
|
|
|
|
includesBlock:
|
|
INCLUDES LBRACE
|
|
includeStatement*
|
|
RBRACE;
|
|
|
|
includeStatement:
|
|
STRING_LITERAL SEMICOLON;
|
|
|
|
keywordsBlock:
|
|
KEYWORDS LBRACE
|
|
keywordStatement*
|
|
RBRACE;
|
|
|
|
keywordStatement:
|
|
scope? IDENTIFIER (COMMA IDENTIFIER)* SEMICOLON;
|
|
|
|
hlslBlock:
|
|
HLSL LBRACE
|
|
hlslCode
|
|
RBRACE;
|
|
|
|
hlslCode:
|
|
.*? ; // Capture everything inside hlsl block
|
|
|
|
shaderEntry:
|
|
IDENTIFIER STRING_LITERAL COLON STRING_LITERAL SEMICOLON;
|
|
|
|
functionCall:
|
|
IDENTIFIER LPAREN functionArguments? RPAREN SEMICOLON;
|
|
|
|
functionArguments:
|
|
functionArgument (COMMA functionArgument)*;
|
|
|
|
functionArgument:
|
|
STRING_LITERAL | NUMBER | IDENTIFIER;
|