private JsonValue PropertyReducer(IRule rule, INodeContext <JsonValue> page) { var name = page.Get("name").Single <JsonPrimitive>().Text; var value = page.Get("value").Single(); return(new JsonProperty(name, value)); }
private Node ChainLink(IRule rule, INodeContext <Node> page) { var op = page.Get("op").Single <TokenNode>(); var value = page.Get("value").Single(); return(new BinaryChainLink(op, value)); }
private Node Chain(IRule rule, INodeContext <Node> page) { var head = page.Get("head").Single(); var body = page.Get("body").Single <CollectionNode>(); return(new BinaryChain(head, body.Nodes.OfType <BinaryChainLink>())); }
public INode Reduce(IRule rule, INodeContext <INode> page) { var name = page.Get("name").Single <Value>().Text; var definition = page.Get("rule").Single <ProtoRule>(); definition.RuleName = name; RefNamePropagation(definition); return(definition); }
public INode Reduce(IRule rule, INodeContext <INode> page) { var hasSeparator = page.Get("sep").Optional() != null; var min = int.Parse(page.Get("min").Single <Value>().Text); var max = int.Parse(page.Get("max").Optional <Value>()?.Text ?? "-1"); if (!hasSeparator) { max = min; } return(new Ast.Range(min, max)); }
public INode Reduce(IRule rule, INodeContext <INode> page) { if (page.Count > 1) { var atom = page.Get("atom").Single <ProtoRule>(); var name = page.Get("name").Of <Value>().Select(v => v.Text).StrJoin(string.Empty); atom.RefName = name.Substring(1); return(atom); } else { return(page.Get(0)); } }
public INode Reduce(IRule rule, INodeContext <INode> page) { var node = page.Get(0); if (node is Ast.Range) { return(node); } var special = ((Value)node).Text; switch (special) { case "*": return(new Ast.Range(0, -1)); case "+": return(new Ast.Range(1, -1)); case "?": return(new Ast.Range(0, 1)); default: throw new InvalidOperationException(); } }
public INode Reduce(IRule rule, INodeContext <INode> page) { var ruleName = ((Value)page.Get(0)).Text; var result = new ProtoRule("Ref", rule => rule.Ref(ruleName)); result.RuleName = ruleName; return(result); }
public INode Reduce(IRule rule, INodeContext <INode> page) { var prefix = page.Get("prefix").Optional <Value>()?.Text; var range = page.Get("suffix").Optional <Ast.Range>(); var atom = page.Get("atom").Single <ProtoRule>(); var result = atom; if (range != null) { result = new ProtoRule(nameof(Repeat), rule => new Repeat(rule.RuleName, rule.Single(), range.Min, range.Max)); result.Children.Add(atom); atom = result; } if (prefix != null) { result = _prefixMap[prefix](); result.Children.Add(atom); } return(result); }
public INode Reduce(IRule rule, INodeContext <INode> page) { // sequence with a single item => no sequence needed if (page.Count == 1) { return(page.Get(0)); } var result = new ProtoRule(nameof(Core.Rules.Sequence), rule => new Core.Rules.Sequence(rule.RuleName, rule.All())); result.AddChildren(page.GetAll().Of <ProtoRule>()); return(result); }
public INode Reduce(IRule rule, INodeContext <INode> page) { // choice with a single item => no choice needed if (page.Count == 1) { return(page.Get(0)); } var result = new ProtoRule(nameof(Core.Rules.Choice), rule => new Core.Rules.Choice(rule.RuleName, rule.All())); // filter out the "|" values result.AddChildren(page.GetAll().Of <ProtoRule>()); return(result); }
public static NodeContextValue <TNode> GetLift <TNode>(this INodeContext <TNode> context) { return(context.Get(IRuleRef.LiftRefName)); }
public INode Reduce(IRule rule, INodeContext <INode> page) { var value = ((Value)page.Get(0)).Text ?? "''"; return(new ProtoRule(nameof(TerminalLiteral), rule => new Core.Rules.Terminal(rule.RuleName, new TokenValueMatcher(value.Substring(1, value.Length - 2))))); }
private IEnumerable <JsonValue> PropertiesReducer(IRule rule, INodeContext <JsonValue> page) { return(page.Get("props").As <JsonProperty>()); }
private JsonValue ArrayReducer(IRule rule, INodeContext <JsonValue> page) { return(new JsonArray(page.Get("values").ToList())); }
private JsonValue ObjectReducer(IRule rule, INodeContext <JsonValue> page) { return(new JsonObject(page.Get("props").As <JsonProperty>().ToList())); }
public INode Reduce(IRule rule, INodeContext <INode> page) { var type = page.Get("type").Single <Value>().Text ?? string.Empty; return(new ProtoRule(nameof(TerminalType), rule => new Core.Rules.Terminal(rule.RuleName, type))); }