~laumann/lc

lc/lex: add "long" token and lex long integers
c/lex: mostly functional lexer

Still need to parse numbers, but otherwise the lexer looks
functional. It provides location information for each token (something
the OCaml impl does not do).
c/lex: lexing identifiers and keywords

Need to lex numbers and propagate line/column number information.
c: lex single keyword/identifier
c: work on lexing single tokens
c: flesh out tokens and lexer
main: start work on arg parsing
use /* .. */ for comments, and C17
c: nascent C implementation
lc/tacky: Option.map + Option.value = Option.fold
lc/tacky: fix tackygen for static storage variables
lc: codegen + emit

Prefer H.replace over H.add to avoid multiple bindings of the same
key.

Does not pass all the tests, but close. It appears that updating
local static variables is an issue. GDB to the rescue?
lc/tacky: generate TACKY from AST and symbol table
lc/typecheck: finalize typechecking of static/extern functions/variables

The test suite now passes the validation stage!
lc: semantic analysis plus initial typechecking static/extern

Fix a small issue in typecheck, where _symbols should have been
symbols. Move the declaration of the symbols table down to prevent
future issues like this.

I also found that I had forgotten to capture the storage class for
function declarations with no definition.
tests: remove comment from fib
driver: use if, not match
lc/parse: parse storage classes, and top-level variable declarations

I really should clean up the AST pretty-printing, it's not so pretty anymore.
Next
Do not follow this link