4 using System.Collections.Generic;
9 using SiliconStudio.Shaders.Ast;
11 namespace SiliconStudio.Shaders.
Grammar
13 public abstract partial class ShaderGrammar
15 #region Public Methods
19 var keyTerm = ToTerm(term);
20 keyTerm.AstNodeConfig =
new TokenInfo {
TokenCategory = TokenCategory.Keyword, IsCaseInsensitive = isCaseInsensitive};
26 var keyTerm = ToTerm(term);
37 terminal.AstNodeConfig = config;
39 TokenTypeToTerminals.Add(type, terminal);
44 var keyTerm = ToTerm(term);
46 TokenTypeToTerminals.Add(type, keyTerm);
52 var keyTerm = ToTerm(term);
54 TokenTypeToTerminals.Add(type, keyTerm);
64 if (node.ChildNodes.Count == 1)
return (T)node.ChildNodes[0].AstNode;
70 T value = initialValue;
71 foreach (var storageClassItem
in enumValues)
73 value = CompositeEnum.OperatorOr(value, (T)storageClassItem.AstNode);
81 return CreateRuleFromObjectTypes(types.AsEnumerable());
88 foreach (var type
in types)
100 foreach (var alternativeName
in type.AlternativeNames)
108 var list =
new List<T>();
109 FillListFromNodes(node.ChildNodes, list);
115 foreach (var childNode
in nodes)
117 if (childNode.AstNode != null)
118 items.Add((TItem)childNode.AstNode);
124 if (node.
Token != null) builder.Append(node.Token.Text);
126 foreach (var subNode
in node.ChildNodes)
128 FillTokenText(subNode, builder);
134 var builder =
new StringBuilder();
135 FillTokenText(node, builder);
136 return builder.ToString();
141 if (node.ChildNodes.Count != 1)
143 return (T)Enum.ToObject(typeof(T), 0);
146 return (T)Enum.Parse(typeof(T), node.ChildNodes[0].Token.Text,
true);
153 node = node.ChildNodes[0];
156 return (
string)node.AstNode;
171 var nonTerminal = T(name);
172 nonTerminal.Flags = TermFlags.IsTransient | TermFlags.NoAstNode;
static NonTerminal T(string name)
static NonTerminal TT(string name)
static string ParseStringFromNode(ParseTreeNode node)
KeyTerm Punc(string term, TokenType type)
static void FillTokenText(ParseTreeNode node, StringBuilder builder)
static NonTerminal T(string name, AstNodeCreator nodeCreator)
delegate void AstNodeCreator(ParsingContext context, ParseTreeNode parseNode)
KeyTerm Op(string term, TokenType type)
ParseTreeNodeList ChildNodes
KeyTerm TypeName(string term)
static string GetTokenText(ParseTreeNode node)
BnfExpression CreateRuleFromObjectTypes(IEnumerable< ObjectType > types)
void Term(Terminal terminal, TokenCategory category, TokenType type)
BnfExpression CreateRuleFromObjectTypes(params ObjectType[] types)
KeyTerm Keyword(string term, bool isCaseInsensitive=false)