Compiling Expressions 17

This commit is contained in:
nazrin 2025-06-04 19:49:53 +00:00
parent 8fb449825d
commit 41404633da
18 changed files with 546 additions and 64 deletions

View file

@ -8,6 +8,37 @@ template defaultCtor(){
}
import std.ascii : isAlpha, isAlphaNum;
bool isAlpha_(dchar c) => c.isAlpha || c == '_';
bool isAlphaNum_(dchar c) => c.isAlphaNum || c == '_';
bool isAlpha_(dchar c) @nogc nothrow @safe => c.isAlpha || c == '_';
bool isAlphaNum_(dchar c) @nogc nothrow @safe => c.isAlphaNum || c == '_';
T pop(T)(ref T[] arr){
T v = arr.last;
arr.length--;
return v;
}
T shift(T)(ref T[] arr){
T v = arr.first;
arr = arr[1 .. $];
return v;
}
ref T sole(T)(T[] arr) @nogc @safe pure{
assert(arr.length == 1, "Not sole");
return arr[0];
}
ref T first(T)(T[] arr) @nogc @safe pure{
assert(arr.length >= 1, "No first");
return arr[0];
}
ref T second(T)(T[] arr) @nogc @safe pure{
assert(arr.length >= 2, "No second");
return arr[1];
}
ref T third(T)(T[] arr) @nogc @safe pure{
assert(arr.length >= 3, "No third");
return arr[2];
}
ref T last(T)(T[] arr) @nogc @safe pure{
assert(arr.length >= 1, "No last");
return arr[$-1];
}