Skip to content
Branch: master
Find file History
Permalink
Type Name Latest commit message Commit time
..
Failed to load latest commit information.
test Much simplified and improved CO_Update merge Sep 20, 2015
Batch.cpp Much simplified and improved CO_Update merge Sep 20, 2015
Batch.h Broken support of not emitting output nodes that become bad. Better t… Aug 2, 2015
Grapher.cpp
Grapher.h Output batch items are independent changes; better IncParser API, and… Jul 2, 2015
IConnection.cpp Renamed IList -> List May 25, 2015
IConnection.h Renamed IList -> List May 25, 2015
IncParser.cpp
IncParser.h Important bugfixes in Seq/Star. Several cleanups and log improvements. Oct 8, 2015
Keyword.cpp Rename ComputeFunc -> ParseFunc May 26, 2015
Keyword.h
List.cpp Only remove output items if a node goes bad, don't add/update them. U… Aug 29, 2015
List.h
ListenerTable.h
Makefile.am
Meta.cpp Fixed some bugs in Seq/Star :) Oct 19, 2015
Meta.h Fix for Seq output and ordering of IncParser output nodes Sep 27, 2015
ObjectPool.h Implement the Enter key in istatik Sep 24, 2015
Opt.cpp
Opt.h Added "Opt" (optional) rule, and fixed some problems with clearing ch… Oct 9, 2015
Or.cpp Some hacky fixes: Seq/Star eject any clear/pending children before pr… Oct 11, 2015
Or.h
OrderList.cpp Only remove output items if a node goes bad, don't add/update them. U… Aug 29, 2015
OrderList.h Renamed IList -> List May 25, 2015
OutputFunc.cpp
OutputFunc.h Re-added silent output for nodes Oct 9, 2015
ParseAction.h
ParseFunc.h
README.md Added README for statik Oct 28, 2015
Regexp.cpp Better Updates to nodes, and passing live output of regexp's. Still i… Oct 30, 2015
Regexp.h
Root.cpp Important bugfixes in Seq/Star. Several cleanups and log improvements. Oct 8, 2015
Root.h Rename ComputeFunc -> ParseFunc May 26, 2015
Rule.cpp Re-added silent output for nodes Oct 9, 2015
Rule.h Small interface changes May 26, 2015
SError.h Better namespaceing of header #defines May 25, 2015
SLog.cpp
SLog.h Better namespaceing of header #defines May 25, 2015
STree.cpp
STree.h git sucks Sep 20, 2015
Seq.cpp
Seq.h Rename ComputeFunc -> ParseFunc May 26, 2015
Star.cpp
Star.h Added PLUS rule (match one or more times) Oct 8, 2015
State.cpp
State.h Added "Opt" (optional) rule, and fixed some problems with clearing ch… Oct 9, 2015
notes.txt
reorg.txt

README.md

statik

http://statik.rocks

statik is a C++ library for incremental compilation. You give it a grammar, and it gives you an incremental parser. "Incremental" means that the input are changes to the characters of the input source code, and the output are changes to the resulting compiled bytecode.

Statik allows you to write a compiler as a sequence of "phases" of parsing. Each phase incrementally translates an input list to an output list. For example, your compiler might be constructed as the pipeline: lexer -> parser -> code-generator. The lexer incrementally translates source-code characters to tokens. The parser translates incremental changes to the token list, to an incrementally-updating parse tree. The code-generator responds to the changing parse tree by generating the bytecode for those changes, and emits the bytecode changes incrementally.

The parser author can provide as many phases as they want; for example, you could toss in an incremental pre-processor, or other phases of compilation.

status

Statik still has some major bugs in some of its rules, especially when grammars are more than a few layers deep. So it's not yet practical for usage, but it's getting pretty close. It can also output graphs (in GraphViz format) to help understand how it runs an incremental parse.

code

Statik is embedded within the codebase for shok; they will be separated soon.

There are three pieces:

  • statik/ The library itself, compile it down to libstatik.a
    • statik/test/ Test suite
  • exstatik/ Example parsers
  • istatik/ An interactive ncurses GUI for running/visualizing statik

Publications

You can’t perform that action at this time.