Here's an overview of how the code is arranged:

Client (GPLv3):
===============

ENTRY POINT:         dimension/main.c
Tokenizing:          dimension/lexer.l
Language directives: dimension/tokenize.c
Parsing:             dimension/common.rules
Extra parsing stuff: dimension/{common,grammar,directives}.*
Tests:               tests/dimension/*.{pov,sh}
Benchmarks:          bench/dimension/*.{sh,pov}

Library (LGPLv3):
=================

API:                   libdimension/dimension.h, libdimension/dimension/*.h
                       (Implementations for libdimension/dimension/$file.h
                       are generally at libdimension/$file.c)
Ray tracing algorithm: libdimension/raytrace.c
Bounding hierarchy:    libdimension/prtree.{c,h}
Library internals:     libdimension/dimension-impl.h and its #includes
Tests:                 tests/libdimension/*.{c,cpp}
Benchmarks:            bench/libdimension/*.c