Library for lexing and parsing D source code.
Online documentation is available here.
A HTML version of libdparse's grammar is also automatically generated.
Tests are present in the test directory. To run them execute the run_tests.sh script. Running the tests on Windows is not currently supported.
/+dub.sdl:
dependency "libdparse" version="~>0.7"
+/
import dparse.ast;
import std.stdio, std.range;
class TestVisitor : ASTVisitor
{
alias visit = ASTVisitor.visit;
int indentLevel;
override void visit(const FunctionDeclaration decl)
{
writeln(' '.repeat(indentLevel * 4), decl.name.text);
indentLevel++;
scope (exit) indentLevel--;
decl.accept(this);
}
}
void main()
{
import dparse.lexer;
import dparse.parser : parseModule;
import dparse.rollback_allocator : RollbackAllocator;
auto sourceCode = q{
void foo() @safe {
void bar();
}
};
LexerConfig config;
auto cache = StringCache(StringCache.defaultBucketCount);
auto tokens = getTokensForParser(sourceCode, config, &cache);
RollbackAllocator rba;
auto m = parseModule(tokens, "test.d", &rba);
auto visitor = new TestVisitor();
visitor.visit(m);
}