ParseTree TokenAsParseTree(ParseTree.Labels prim0) { return(this.WithNewParseTree(prim0, pt => { pt.Content = this.CurrentToken().Content; this.NextToken(); })); }
ParseTree WithAnchoredParseTree(int startPos, ParseTree.Labels label, Action <ParseTree> action) { ParseTree result = new ParseTree(); result.StartPos = startPos; result.Label = label; action(result); result.EndPos = this.LastToken().EndPos; return(result); }
ParseTree WithNewParseTree(ParseTree.Labels label, Action <ParseTree> action) { ParseTree result = new ParseTree(); result.StartPos = this.CurrentToken().StartPos; result.Label = label; action(result); result.EndPos = this.LastToken().EndPos; return(result); }
object CompileAtomValue(ParseTree.Labels label, string content) { switch (label) { case ParseTree.Labels.Number: { double doubleResult; long longResult; if (long.TryParse(content, out longResult)) { return(Value.MakeInt(longResult)); } else if (double.TryParse(content, out doubleResult)) { return(Value.MakeFloat(doubleResult)); } } Utils.Panic(); return(null); case ParseTree.Labels.String: return(Value.Make(content.Substring(1, content.Length - 2))); case ParseTree.Labels.Bool: switch (content) { case "true": return(Value.Make(true)); case "false": return(Value.Make(false)); default: Utils.Panic(); return(null); } case ParseTree.Labels.Void: return(Value.Make()); default: Utils.Panic(); return(null); } }