public void ITC11LoadWord() { //// test loading of basic grammar elements var outNo = new List <TextElement>(); var idn = new WordIdent(); var str = new WordString(); var sym = new WordSymbol("symbol1"); // load string + string + name TextBuffer textBuffer = Util.NewBufferWs(" Aname symbol1 'Fghij' sym02 "); idn.TextBuffer = textBuffer; sym.TextBuffer = textBuffer; str.TextBuffer = textBuffer; idn.TextBuffer = textBuffer; Assert.AreEqual(true, idn.Load(outNo, 0), "Can't read a combinded Identifier"); Assert.AreEqual(true, sym.Load(outNo, 0), "Can't read a combinded Symbol"); Assert.AreEqual(true, str.Load(outNo, 0), "Can't read a combinded String"); Assert.AreEqual(true, idn.Load(outNo, 0), "Can't read a combinded Identifier"); textBuffer.FindNextWord(null, false); CodeElement node = outNo[1] as CodeElement; Assert.IsNotNull(node, "Can't find node after reading combinded Quote"); Assert.AreEqual("Fghij", node.Value, "The combinded Quote value is not correct"); node = outNo[2] as CodeElement; Assert.IsNotNull(node, "Can't find node after reading combinded VarName"); Assert.AreEqual("sym02", node.Value, "The combinded VarName value is not correct"); Assert.AreEqual(45, textBuffer.PointerNextChar, "The buffer pointer is of after reading combinded values"); }
public void ITC10Load() { var word = new WordIdent(); Util.ParserLoadWord(word, " sym01 ", "sym01", MetaParser.WordIdent__, 2, 7, 9); // "123456789 }
public void ITC10LoadError() { string testName = "Ident"; var word = new WordIdent(); // "1234 Read 'identifier', EOF error. Util.WordLoadError(" ", word, testName, "itc01: Syntax error (testRule). Expecting identifier, found EOF. Line 1, colomn 4"); // "123456 Read 'identifier', not allowed first letter. Util.WordLoadError(" 2r ", word, testName, "itc10: Syntax error (testRule). Expecting identifier, found 2. Line 1, colomn 2"); }
private static List <ParserElementBase> BuildExpression(Parser parser, IEnumerable <CodeElement> docNodes, ParserStatus status) { //string debug1 = "(" + parser.Name + ")".NL() + docNotes.Aggregate("", (s, n) => s + n.ToMarkupProtected("")); List <ParserElementBase> elements = new List <ParserElementBase>(); foreach (CodeElement element in docNodes) { switch (element.Name) { case MetaParser.Expression_: if (docNodes.Count() > 1) { status.AddBuildError(() => MessageRes.itc29, element, parser.Name); } return(BuildExpression(parser, element.Codes(), status)); case MetaParser.Or_________: ParserElementBase el1, el2; List <CodeElement> orNodes = docNodes.ToList(); // find position int pos = 0; while (pos + 2 < orNodes.Count() && orNodes[++pos] != element) { } if (pos < 1 || pos + 2 > orNodes.Count()) { status.AddBuildError(() => MessageRes.itc30, element, parser.Name); } if (pos == 1) { el1 = elements[0]; } else { el1 = new SetOfElements(elements.ToArray()); } var elementElements2 = new List <CodeElement>(); for (int i = pos + 1; i < orNodes.Count(); i++) { elementElements2.Add(orNodes[i]); } List <ParserElementBase> elements2 = BuildExpression(parser, elementElements2, status); if (elements2.Count() == 1) { el2 = elements2[0]; } else { el2 = new SetOfElements(elements2.ToArray()); } return(new List <ParserElementBase> { new Or(el1, el2) }); case MetaParser.WordIdent__: ParserElementBase elem; switch (element.Value) { case MetaParser.WordString_: elem = new WordString(); break; case MetaParser.WordInt____: elem = new WordInt(); break; case MetaParser.WordFloat__: elem = new WordFloat(); break; case MetaParser.WordIdent__: elem = new WordIdent(); break; case MetaParser.WordBool___: elem = new WordBool(); break; default: elem = new RuleLink(element.Value); elem.DefinitionCodeElement = element; break; } elements.Add(elem); break; case MetaParser.WordSymbol_: elements.Add(new WordSymbol(element.Value)); break; case MetaParser.Sequence___: elements.Add(new Sequence(BuildExpression(parser, element.Codes(), status).ToArray())); break; case MetaParser.Optional___: elements.Add(new Optional(BuildExpression(parser, element.Codes(), status).ToArray())); break; case MetaParser.Parentheses: elements.Add(new Parentheses(BuildExpression(parser, element.Codes(), status).ToArray())); break; case MetaParser.Comment____: break; default: status.AddBuildError(() => MessageRes.itc31, element, element.Name); break; } } return(elements); }