protected static void ParseSymbol(ref Grammar.Grammar grammar, string line) { string backup = line; LiteralGrammarElement SymbolKeyword = new LiteralGrammarElement("Symbol "); if (SymbolKeyword.Validate(ref line, true).Result) { line = line.Trim(); string templine = line; SymbolSet AlphabetWithSpace = SymbolSet.FromType(SymbolSetPredefinedType.AlphaNumeric); AlphabetWithSpace.Add(new Symbol('_')); AlphabetWithSpace.Add(new Symbol('$')); VariableLengthGrammarElement SymbolName = new VariableLengthGrammarElement(VariableLengthGrammarElementType.Plus, AlphabetWithSpace); if (SymbolName.Validate(ref line, true).Result) { string name = templine.Substring(0, ((line.Length != 0)?templine.IndexOf(line):templine.Length)).Trim(); line = line.Trim(); LiteralGrammarElement EqualsSign = new LiteralGrammarElement("="); if (EqualsSign.Validate(ref line, true).Result) { line = line.Trim(); try { Symbol symbol = new Symbol(GetSymbolValue(line)); grammar.AddSymbol(name, symbol); } catch (InfinityGrammarScriptParseError ie) { throw new InfinityGrammarScriptParseError("Illegal argument specified as symbol, (enclose in ' ' or \" \")", backup, ie); } } else { throw new InfinityGrammarScriptParseError("Syntax requires a symbol value assignment, which is missing", backup); } } else { throw new InfinityGrammarScriptParseError("The Symbol name specified was not valid. Names given can have Letters, Numbers and $ and _ (underscore)", backup); } } else { throw new InfinityGrammarScriptParseError("Not a Symbol definition", backup); } }
protected static void ParseSymbolRange(ref Grammar.Grammar grammar, string line) { string backup = line; LiteralGrammarElement SymbolRangeKeyword = new LiteralGrammarElement("SymbolRange "); if (SymbolRangeKeyword.Validate(ref line, true).Result) { line = line.Trim(); string templine = line; SymbolSet AlphabetWithSpace = SymbolSet.FromType(SymbolSetPredefinedType.AlphaNumeric); AlphabetWithSpace.Add(new Symbol('_')); AlphabetWithSpace.Add(new Symbol('$')); VariableLengthGrammarElement SymbolName = new VariableLengthGrammarElement(VariableLengthGrammarElementType.Plus, AlphabetWithSpace); if (SymbolName.Validate(ref line, true).Result) { string name = templine.Substring(0, templine.IndexOf(line)).Trim(); line = line.Trim(); LiteralGrammarElement EqualsSign = new LiteralGrammarElement("="); if (EqualsSign.Validate(ref line, true).Result) { line = line.Trim(); string templine2 = line; LiteralGrammarElement FromKeyword = new LiteralGrammarElement("From "); LiteralGrammarElement FromStrKeyword = new LiteralGrammarElement("FromStr "); if (FromKeyword.Validate(ref line, true).Result) { line = line.Trim(); string from = line.Substring(0, line.IndexOf("To") - 1).Trim(); string to = line.Substring(line.IndexOf("To") + 2, line.Length - line.IndexOf("To") - 2).Trim(); from = GetSymbolValue(from); to = GetSymbolValue(to); Console.WriteLine(from + " to " + to); SymbolRange sr = new SymbolRange(from, to); grammar.AddSymbol(name, sr); } else if (FromStrKeyword.Validate(ref line, true).Result) { line = line.Trim(); string from = line.Substring(0, line.IndexOf("To") - 1).Trim(); string to = line.Substring(line.IndexOf("To") + 2, line.Length - line.IndexOf("To") - 2).Trim(); from = GetSymbolValue(from); to = GetSymbolValue(to); Console.WriteLine(from + " to " + to); SymbolRange sr = new SymbolRange(from, to); grammar.AddSymbol(name, sr); } else { throw new InfinityGrammarScriptParseError("From ranges specified by wrong keyword or syntax error.", backup); } } else { throw new InfinityGrammarScriptParseError("Syntax requires a symbol value assignment, which is missing.", backup); } } else { throw new InfinityGrammarScriptParseError("The Symbol name specified was not valid. Names given can have Letters, Numbers and $ and _.", backup); } } else { throw new InfinityGrammarScriptParseError("Not a valid SymbolRange definition.", backup); } }