public void WriteSqlNodeMembers(CSharpWriter csw, RuleCompiler cmp) { foreach (var item in Items) { item.WriteSqlNodeMembers(csw, cmp); } }
public override void Compile(RuleCompiler cmp) { base.Compile(cmp); Rule target = cmp.Rules.FindRule(RefName); MemberNodeName = cmp.AllocVar(target.CodeName + "Node", "SubNode", target.GetResultType(), VariableTypeGroup.SubNode); }
public override void GenRuleTestBody(CSharpWriter csw, RuleCompiler cmp, string member) { csw.WriteLine("{0} res = {1}();", GetResultType(), ParseFuncName); csw.WriteLine("if (res == null) return false;"); csw.WriteLine("args.{0} = res;", member); csw.WriteLine("return true;"); }
public void WriteGenSqlBody(CSharpWriter csw, RuleCompiler cmp) { foreach (var item in Items) { item.WriteGenSqlBody(csw, cmp); } }
public override void GenRuleTestBody(CSharpWriter csw, RuleCompiler cmp, string member) { csw.WriteLine("{0} node = {1}({2});", TypeName, FuncName, CallArgs.CreateDelimitedText(", ")); csw.WriteLine("if (node == null) return false;"); csw.WriteLine("args.{0} = node;", member); csw.WriteLine("return true;"); }
public override void WriteParserMembers(CSharpWriter csw, RuleCompiler cmp) { foreach (var chain in Chains) { chain.WriteParserMembers(csw, cmp); } WriteParseMethodHeader(csw, cmp); int chindex = 0; foreach (var chain in Chains) { csw.Begin("if ({0}(args))", chain.ParseFuncName); csw.WriteLine("args.{0} = {1}.{2}.{3};", EnumVarName, cmp.Rule.GetResultType(), EnumTypeName, EnumElems[chindex]); if (!Mandatory) { csw.WriteLine("args.{0} = true;", IsVariable); } csw.WriteLine("return true;"); csw.End(); chindex++; } if (Mandatory) { csw.WriteLine("return false;"); } else { csw.WriteLine("args.{0} = false;", IsVariable); csw.WriteLine("return true;"); } csw.End(); // method }
public override void WriteParserMembers(CSharpWriter csw, RuleCompiler cmp) { WriteParseMethodHeader(csw, cmp); Rule target = cmp.Rules.FindRule(RefName); target.GenRuleTestBody(csw, cmp, MemberNodeName); csw.End(); }
internal void Compile(RuleCompiler cmp) { ParseFuncName = cmp.AllocFuncName("ParseChain"); foreach (var item in Items) { item.Compile(cmp); } }
public override void WriteSqlNodeMembers(CSharpWriter csw, RuleCompiler cmp) { base.WriteSqlNodeMembers(csw, cmp); foreach (var chain in Chains) { chain.WriteSqlNodeMembers(csw, cmp); } csw.WriteLine("public enum {0} {{ {1} }}", EnumTypeName, EnumElems.CreateDelimitedText(", ")); }
public override void WriteParserMembers(CSharpWriter csw, RuleCompiler cmp) { WriteParseMethodHeader(csw, cmp); csw.Begin("if (IsTerminal(\"{0}\"))", Symbol); csw.WriteLine("args.{0} = CurrentOriginal;", TerminalPosName); csw.WriteLine("NextToken();"); csw.WriteLine("return true;"); csw.End(); csw.WriteLine("return false;"); csw.End(); // method }
//public bool IsSymbol{get{return !Char.IsLetter( Symbol[0]);}} public override void Compile(RuleCompiler cmp) { base.Compile(cmp); if (Symbol.ToCharArray().All(Char.IsLetter)) { TerminalPosName = cmp.AllocVar(Symbol.Capitalize() + "Pos", "TermPos", "SymbolPosition", VariableTypeGroup.SymbolPos); } else { TerminalPosName = cmp.AllocVar(null, "TermPos", "SymbolPosition", VariableTypeGroup.SymbolPos); } }
internal void WriteParserMembers(CSharpWriter csw, RuleCompiler cmp) { foreach (RuleItem item in Items) { item.WriteParserMembers(csw, cmp); } csw.Begin("public bool {0}({1} args)", ParseFuncName, cmp.Rule.ArgsClassName); csw.WriteLine("var beginMark = MarkPosition();"); foreach (RuleItem item in Items) { csw.Begin("if (!{0}(args))", item.ParseFuncName); csw.WriteLine("GoToMark(beginMark);"); csw.WriteLine("return false;"); csw.End(); } csw.WriteLine("return true;"); csw.End(); }
public override void Compile(RuleCompiler cmp) { base.Compile(cmp); if (!Mandatory) { if (CodeId != null) { IsVariable = cmp.AllocVar("Is" + CodeId, null, "bool", VariableTypeGroup.Bool); } else { IsVariable = cmp.AllocVar(null, "IsItem", "bool", VariableTypeGroup.Bool); } } if (CodeId != null) { EnumTypeName = cmp.AllocLocalType(CodeId + "ModeType", null); } else { EnumTypeName = cmp.AllocLocalType(null, "ModeType"); } if (CodeId != null) { EnumVarName = cmp.AllocVar(CodeId + "Mode", null, cmp.Rule.GetResultType() + "." + EnumTypeName, VariableTypeGroup.ModeEnum); } else { EnumVarName = cmp.AllocVar(null, "Mode", cmp.Rule.GetResultType() + "." + EnumTypeName, VariableTypeGroup.ModeEnum); } foreach (var chain in Chains) { string sug = chain.SuggestCodeId(); if (sug == "" || EnumElems.Contains(sug)) { sug = String.Format("Element_{0}", EnumElems.Count + 1); } EnumElems.Add(sug); } foreach (var chain in Chains) { chain.Compile(cmp); } }
public override void WriteGenSqlBody(CSharpWriter csw, RuleCompiler cmp) { if (!Mandatory) { csw.Begin("if ({0})", IsVariable); } csw.Begin("switch ({0})", EnumVarName); for (int i = 0; i < Chains.Count; i++) { csw.WriteLine("case {0}.{1}:", EnumTypeName, EnumElems[i]); csw.Inc(); Chains[i].WriteGenSqlBody(csw, cmp); csw.WriteLine("break;"); csw.Dec(); } csw.End(); // switch if (!Mandatory) { csw.End(); // if ($IsVariable) } }
public override void WriteGenSqlBody(CSharpWriter csw, RuleCompiler cmp) { csw.WriteLine("{0}.GenerateSql(dmp);", MemberNodeName); }
public virtual void Compile(RuleCompiler cmp) { ParseFuncName = cmp.AllocFuncName("ParseItem"); }
public override void Compile(ParserCompiler pc) { m_compiler = new RuleCompiler(pc, this); m_compiler.Compile(); }
public abstract void GenRuleTestBody(CSharpWriter csw, RuleCompiler cmp, string member);
public abstract void WriteParserMembers(CSharpWriter csw, RuleCompiler cmp);
public abstract void WriteGenSqlBody(CSharpWriter csw, RuleCompiler cmp);
protected void WriteParseMethodHeader(CSharpWriter csw, RuleCompiler cmp) { csw.MethodEx("public", "bool", ParseFuncName, cmp.Rule.ArgsClassName + " args"); }
public override void WriteGenSqlBody(CSharpWriter csw, RuleCompiler cmp) { csw.WriteLine("dmp.Put(\"&s%:k\", {0}, \"{1}\");", TerminalPosName, Symbol); }
public virtual void WriteSqlNodeMembers(CSharpWriter csw, RuleCompiler cmp) { }
public override void WriteGenSqlBody(CSharpWriter csw, RuleCompiler cmp) { csw.WriteLine("dmp.Put(\"{0}\");", Format); }
public override void WriteParserMembers(CSharpWriter csw, RuleCompiler cmp) { WriteParseMethodHeader(csw, cmp); csw.WriteLine("return true;"); csw.End(); // method }