14 using System.Collections.Generic;
16 using System.Reflection;
20 internal class IntList :
List<int> { }
26 public NonTerminal(
string name,
string errorAlias) : base(name, errorAlias) { }
27 public NonTerminal(
string name,
string errorAlias, Type nodeType) : base(name, errorAlias, nodeType ) { }
29 public NonTerminal(
string name, Type nodeType) : base(name, null, nodeType) { }
37 #region properties/fields: Rule, ErrorRule
49 private string _convertedTemplate;
50 private IntList _captionParameters;
53 #region overrides: ToString, Init
58 base.Init(grammarData);
59 if (!
string.IsNullOrEmpty(NodeCaptionTemplate))
60 ConvertNodeCaptionTemplate();
62 TokenPreviewHint.Init(grammarData);
66 #region data used by Parser builder
70 #region custom grammar hints
72 internal void InsertCustomHints() {
74 foreach (var production
in Productions) {
75 foreach (var lr0item
in production.LR0Items) {
96 var sb =
new StringBuilder();
97 foreach (var term
in terms) {
98 sb.Append(term.ToString());
101 return sb.ToString().Trim();
104 #region NodeCaptionTemplate utilities
108 private void ConvertNodeCaptionTemplate() {
109 _captionParameters =
new IntList();
110 _convertedTemplate = NodeCaptionTemplate;
113 var strParam =
"#{" + index +
"}";
114 if(_convertedTemplate.Contains(strParam)) {
115 _convertedTemplate = _convertedTemplate.Replace(strParam,
"{" + _captionParameters.Count +
"}");
116 _captionParameters.Add(index);
118 if (!_convertedTemplate.Contains(
"#{"))
return;
124 var paramValues =
new string[_captionParameters.Count];
125 for(
int i = 0; i < _captionParameters.Count; i++) {
126 var childIndex = _captionParameters[i];
128 var child = node.ChildNodes[childIndex];
131 paramValues[i] = (child.Token != null? child.Token.ValueString : child.ToString());
134 var result = string.Format(_convertedTemplate, paramValues);
143 return NonTerminal.NonTerminalsToString(
this,
" ");
149 return NonTerminal.NonTerminalsToString(
this,
" ");
override string ToString()
NonTerminal(string name, string errorAlias, Type nodeType)
override string ToString()
TokenPreviewHint ShiftIf(string first)
TokenPreviewHint ReduceIf(string first)
NonTerminal(string name, AstNodeCreator nodeCreator)
delegate void AstNodeCreator(ParsingContext context, ParseTreeNode parseNode)
static string NonTerminalsToString(IEnumerable< NonTerminal > terms, string separator)
NonTerminal(string name, BnfExpression expression)
ParseTreeNodeList ChildNodes
TokenPreviewHint ShiftIf(Terminal first)
string NodeCaptionTemplate
string GetNodeCaption(ParseTreeNode node)
override string ToString()
NonTerminal(string name, Type nodeType)
TokenPreviewHint ReduceIf(Terminal first)
NonTerminal(string name, string errorAlias, AstNodeCreator nodeCreator)
NonTerminal(string name, string errorAlias)
override void Init(GrammarData grammarData)