A string function I've found invaluable for parsing DSLs

Bill Baxter wbaxter at gmail.com
Sat Nov 14 11:16:09 PST 2009


On Sat, Nov 14, 2009 at 10:16 AM, downs <default_357-line at yahoo.de> wrote:
> Slightly modified from what you so amusingly called "my CoolTools.ctfe":
>
> ctSlice (not to be confused with the [] array slicing functionality) "slices" a string in two at a marker, returning the text before the marker and removing it (and the marker) from the input text.
>
> The ct prefix is handy for differentiating between std.metastrings and std.string functions - one may often want to import both ..

Yeh, I agree some diffentiator is good.  std.metastrings started off
with a capital letter convention to differentiate.  I'm not sure which
is better.

> string ctSlice(ref string what, string where) {
>  auto loc = what.ctFind(where);
>  if (loc == -1) {
>    auto res = what;
>    what = null;
>    return res;
>  }
>  auto res = what[0 .. loc];
>  what = what[loc+where.length .. $];
>  return res;
> }
>
> When is this useful?
>
> For instance, when writing a compile-time enum, you may want to use a syntax of the form "EnumName: Entries"
>
> In that case, you could write `string name = input.ctSlice(":"); '

That's nice.
I would probably call that something like "ctZapToChar", in honor of
the same function in Emacs. :-)
Slice is a very confusing name for it.

So is your code free game for stealing from for std.metastring?
(meaning whatever I borrowed would be re-licensed under Boost)

--bb



More information about the Digitalmars-d mailing list