4 using System.Collections.Generic;
9 using SiliconStudio.Shaders.Ast;
10 using SiliconStudio.Shaders.Ast.Hlsl;
11 using SiliconStudio.Shaders.Utility;
15 namespace SiliconStudio.Shaders.
Grammar.Hlsl
31 var annotations = Ast<Annotations>(node);
35 FillListFromNodes(node.
ChildNodes[1].ChildNodes, annotations.Variables);
47 var values = GetOptional<Annotations>(node);
48 node.AstNode = values;
51 Ast<Annotations>(node);
64 var value = Ast<AsmExpression>(node);
68 value.Text = node.ChildNodes[0].Token.Text;
80 var value = Ast<AttributeDeclaration>(node);
91 FillListFromNodes(node.
ChildNodes[3].ChildNodes[0].ChildNodes, value.Parameters);
107 var value = Ast<CastExpression>(node);
113 var arrayType =
new ArrayType { Type = type, Span = SpanConverter.Convert(node.ChildNodes[2].Span) };
114 FillListFromNodes(node.
ChildNodes[2].ChildNodes, arrayType.Dimensions);
134 node.AstNode = node.ChildNodes[0].ChildNodes[0].AstNode;
136 node.AstNode =
new List<TypeName>();
150 var value = Ast<ClassType>(node);
156 value.BaseClasses.AddRange((List<TypeName>)node.
ChildNodes[2].AstNode);
157 FillListFromNodes(node.
ChildNodes[4].ChildNodes, value.Members);
164 if (genericIdentifier != null)
166 foreach (var genericIdentifierItem
in genericIdentifier.Identifiers)
170 input =
new Identifier(input.Text) { Span = genericIdentifier.Span };
186 var value = Ast<CompileExpression>(node);
203 var value = Ast<ConstantBuffer>(node);
204 value.Attributes = (List<AttributeBase>)node.
ChildNodes[0].AstNode;
208 value.Name = GetOptional<Identifier>(node.ChildNodes[2]);
209 value.Register = GetOptional<RegisterLocation>(node.ChildNodes[3]);
211 FillListFromNodes(node.
ChildNodes[5].ChildNodes, value.Members);
225 var value = Ast<GenericType<T1>>(node);
233 identifier = ((TypeBase)node.
ChildNodes[0].AstNode).Name;
236 if (identifier == null)
238 CreateIdentifierAst(parsingcontext, node.
ChildNodes[0]);
242 value.Name = identifier;
259 var value = Ast<GenericType<T1, T2>>(node);
267 identifier = ((TypeBase)node.
ChildNodes[0].AstNode).Name;
270 if (identifier == null)
272 CreateIdentifierAst(parsingcontext, node.
ChildNodes[0]);
276 value.Name = identifier;
279 value.Parameters[1] = (
Node)node.ChildNodes[3].AstNode;
291 var values = Ast<List<Identifier>>(node);
294 values.Add(
new Identifier(subNode.Token.Text) { Span = SpanConverter.Convert(subNode.Span) });
310 var value = Ast<IdentifierNs>(node);
311 value.Identifiers =
new List<Identifier>();
313 value.Identifiers.AddRange((List<Identifier>)node.
ChildNodes[2].AstNode);
326 CreateIdentifierAst(context, node.
ChildNodes[1]);
328 value.IsSpecialReference =
true;
341 var value = Ast<InterfaceType>(node);
350 FillListFromNodes(node.
ChildNodes[3].ChildNodes, value.Methods);
364 var matrixType = Ast<MatrixType>(node);
368 matrixType.Type = (TypeBase)node.
ChildNodes[2].AstNode;
369 matrixType.Parameters[1] = (
Literal)node.ChildNodes[3].AstNode;
399 var value = Ast<Pass>(node);
404 value.Attributes = (List<AttributeBase>)node.
ChildNodes[0].AstNode;
405 value.Name = GetOptional<Identifier>(node.
ChildNodes[2]);
409 FillListFromNodes(node.
ChildNodes[5].ChildNodes, value.Items);
424 node.AstNode = node.ChildNodes[0].AstNode;
436 var value = Ast<RegisterLocation>(node);
480 var value = Ast<StateExpression>(node);
481 value.StateType = (TypeBase)node.
ChildNodes[0].AstNode;
495 var stateValues = Ast<StateInitializer>(node);
496 FillListFromNodes(node.
ChildNodes[1].ChildNodes, stateValues.Items);
508 var value = Ast<Literal>(node);
510 value.SubLiterals =
new List<Literal>();
514 var text =
new StringBuilder();
515 var textValue =
new StringBuilder();
516 foreach (var childNode
in node.
ChildNodes[0].ChildNodes)
520 Span = SpanConverter.Convert(childNode.Span),
521 Value = childNode.AstNode,
522 Text = childNode.Token.Text
524 value.SubLiterals.Add(subLiteral);
525 textValue.Append(subLiteral.Value);
528 text.Append(
"\"").Append(textValue).Append(
"\"");
530 value.Value = textValue.ToString();
531 value.Text = text.ToString();
543 var value = Ast<Technique>(node);
549 value.Attributes = (List<AttributeBase>)node.ChildNodes[0].AstNode;
550 value.Name = GetOptional<Identifier>(node.ChildNodes[2]);
554 FillListFromNodes(node.
ChildNodes[5].ChildNodes, value.Passes);
572 CreateGenericTypeAst<TypeBase>(context, node);
576 CreateGenericTypeAst<TypeBase, Literal>(context, node);
589 var value = Ast<Typedef>(node);
601 value.Type = (TypeBase)node.
ChildNodes[indexType].AstNode;
602 var identifierList = (List<Identifier>)node.ChildNodes[indexType + 1].AstNode;
604 var declarators =
new List<Typedef>(identifierList.Count);
607 foreach (var identifier
in identifierList)
609 var declarator =
new Typedef(value.Type)
611 Span = identifier.Span,
615 if (identifier.HasIndices)
617 var arrayType =
new ArrayType { Type = declarator.Type, Span = identifier.Span };
618 arrayType.Dimensions.AddRange(identifier.Indices);
619 declarator.Type = arrayType;
620 identifier.Indices.Clear();
623 declarators.Add(declarator);
626 if (declarators.Count == 1)
628 value.Type = declarators[0].Type;
629 value.Name = declarators[0].Name;
633 value.SubDeclarators = declarators;
652 var qualifiers = AstCompositeEnum<Qualifier>(node);
659 qualifiers |= (Semantic)childNode.AstNode;
663 qualifiers |= (PackOffset)childNode.AstNode;
667 qualifiers = CreateEnumFlags(qualifiers, childNode.ChildNodes);
672 node.AstNode = qualifiers;
686 var vectorType = Ast<VectorType>(node);
690 vectorType.Type = (TypeBase)node.
ChildNodes[2].AstNode;
691 vectorType.Parameters[1] = (
Literal)node.ChildNodes[3].AstNode;
703 base.CreateParameterAst(context, node);
710 parameter.Qualifiers = (
Qualifier)node.ChildNodes[1].AstNode;
712 var postQualifier = (Tuple<Expression, Qualifier>)node.
ChildNodes[4].AstNode;
713 parameter.InitialValue = postQualifier.Item1;
714 parameter.Qualifiers |= postQualifier.Item2;
723 Tuple<Expression, Qualifier> postQualifier;
731 postQualifier =
new Tuple<Expression, Qualifier>(null, (
Qualifier)node.
ChildNodes[0].AstNode);
734 node.AstNode = postQualifier;
750 node.AstNode = node.ChildNodes[0].AstNode;
754 var qualifier = Shaders.Ast.Hlsl.ParameterQualifier.Parse(node.ChildNodes[0].Token.Text);
755 qualifier.Span = SpanConverter.Convert(node.Span);
756 node.AstNode = qualifier;
762 var qualifier = AstCompositeEnum<Qualifier>(node);
766 qualifier = Shaders.Ast.Hlsl.StorageQualifier.Parse(node.ChildNodes[0].Token.Text);
767 qualifier.Span = SpanConverter.Convert(node.Span);
771 node.AstNode = qualifier;
793 base.CreateVariableDeclaratorAst(parsingcontext, node);
809 base.CreateVariableDeclaratorRawAst(parsingcontext, node);
819 node.AstNode = ConstantBufferType.Parse(node.ChildNodes[0].Token.Text);
824 node.AstNode = FloatQualifier.Parse(node.ChildNodes[0].Token.Text);
832 var value = Ast<IdentifierDot>(node);
834 value.Identifiers.AddRange((List<Identifier>)node.
ChildNodes[2].AstNode);
839 node.AstNode = node.Token.Text.Trim(
'"');
852 var value = Ast<IdentifierGeneric>(node);
853 value.Text = identifier.Text;
854 value.Identifiers.AddRange((List<Identifier>)node.
ChildNodes[2].AstNode);
858 node.AstNode = identifier;
864 var value = Ast<TypeName>(node);
875 var value = Ast<Identifier>(node);
876 var text =
new StringBuilder();
878 text.Append(subNode.Token.Text);
879 value.Text = text.ToString();
890 node.AstNode = node.ChildNodes[0].AstNode;
894 var newnode = Ast<IdentifierDot>(node);
902 node.AstNode = node.ChildNodes[0].AstNode;
SiliconStudio.Shaders.Ast.Hlsl.ParameterQualifier ParameterQualifier
static void CreateSemanticAst(ParsingContext context, ParseTreeNode node)
The create semantic ast.
Specialized ParameterQualifier for Hlsl.
static void CreateAttributeAst(ParsingContext context, ParseTreeNode node)
The create attribute ast.
override void CreateParameterAst(ParsingContext context, ParseTreeNode node)
The create parameter ast.
static void CreateStateValuesAst(ParsingContext context, ParseTreeNode node)
The create state values ast.
static void CreateVectorAst(ParsingContext parsingContext, ParseTreeNode node)
Creates the vector ast.
static void CreateClassDeclarationAst(ParsingContext context, ParseTreeNode node)
The create class declaration ast.
static void CreateMatrixAst(ParsingContext parsingContext, ParseTreeNode node)
Creates the matrix ast.
static void CreateConstantBufferAst(ParsingContext context, ParseTreeNode node)
The create constant buffer ast.
static SourceLocation Convert(Irony.Parsing.SourceLocation sourceLocation)
override void CreateVariableDeclaratorAst(ParsingContext parsingcontext, ParseTreeNode node)
The create variable declarator ast.
static void CreateTechniqueAst(ParsingContext context, ParseTreeNode node)
The create technique ast.
An interface used by generic definitions and instance.
static void CreateVariableDeclaratorQualifierPostAst(ParsingContext context, ParseTreeNode node)
The create variable declarator qualifier post ast.
static void CreateAnnotationsOptAst(ParsingContext context, ParseTreeNode node)
The create annotations opt ast.
static void CreateTextureDMSAst(ParsingContext context, ParseTreeNode node)
The create texture dms ast.
static void CreateClassBaseTypeAst(ParsingContext context, ParseTreeNode node)
The create class base type ast.
static void CreateIdentifierNsAst(ParsingContext context, ParseTreeNode node)
The create identifier ns ast.
A single parameter declaration.
Describes a packoffset(value).
override void CreateStorageQualifier(ParsingContext context, ParseTreeNode node)
The create storage qualifier.
ParseTreeNodeList ChildNodes
virtual void CreateIdentifierSubGenericAst(ParsingContext context, ParseTreeNode node)
virtual void CreateParameterQualifier(ParsingContext context, ParseTreeNode node)
The create parameter qualifier.
static void CreateStringLiteralAst(ParsingContext context, ParseTreeNode node)
The create string literal ast.
static void CreatePassAst(ParsingContext context, ParseTreeNode node)
The create pass ast.
SiliconStudio.Shaders.Ast.Hlsl.StorageQualifier StorageQualifier
Defines a generic parameter type.
static void CreateIdentifierSpecialReferenceAst(ParsingContext context, ParseTreeNode node)
The create identifier special reference ast.
A generic identifier in the form Typename
override void CreateVariableDeclaratorRawAst(ParsingContext parsingcontext, ParseTreeNode node)
The create variable declarator raw ast.
static void CreateCompileExpressionAst(ParsingContext context, ParseTreeNode node)
The create compile expression ast.
static void CreateStateExpressionAst(ParsingContext context, ParseTreeNode node)
The create state expression ast.
static void CreateIdentifierCompositeList(ParsingContext context, ParseTreeNode node)
The create identifier composite list.
static void CreateAsmAst(ParsingContext context, ParseTreeNode node)
The create asm ast.
static void CreateCastExpressionAst(ParsingContext parsingcontext, ParseTreeNode node)
The create cast expression ast.
static void CreatePackOffsetAst(ParsingContext context, ParseTreeNode node)
The create pack offset ast.
static void CreateInterfaceAst(ParsingContext context, ParseTreeNode node)
The create interface ast.
static readonly Qualifier None
None Enum.
static void CreatePassStatementAst(ParsingContext context, ParseTreeNode node)
The create pass statement ast.
static void CreateTypedefAst(ParsingContext parsingcontext, ParseTreeNode node)
The create typedef ast.
static void CreateAnnotationsAst(ParsingContext context, ParseTreeNode node)
The create annotations ast.
static void CreateRegisterLocationAst(ParsingContext context, ParseTreeNode node)
The create register location ast.
Methods used to create the Abstract Syntax Tree..