Example:

import std.lexer;
import std.d.lexer;
import std.array;
import std.stdio;

void main(string[] args)
{
        File input = File(args[1]);
        File output = args.length > 2 ? File(args[2]) : stdout;
        ubyte[] inputBytes = uninitializedArray!(ubyte[])(input.size);
        input.rawRead(inputBytes);
        StringCache cache = StringCache(StringCache.defaultBucketCount);
        LexerConfig config;
        config.fileName = args[1];
        config.stringBehavior = StringBehavior.source;
        auto tokens = byToken(inputBytes, config, &cache).array;
        foreach (i; 0 .. tokens.length)
        {
                switch (tokens[i].type)
                {
                case tok!"catch":
                        if (i + 1 < tokens.length && tokens[i + 1].type != 
tok!"(")
                        {
                                output.write("catch (Throwable)");
                                break;
                        }
                        else
                                goto default;
                default:
                        output.write(tokens[i].text is null
                                ? str(tokens[i].type)
                                : tokens[i].text);
                        break;
                }
        }
}

Reply via email to