2 unstable releases
0.2.0 | Nov 2, 2020 |
---|---|
0.1.0 | Oct 31, 2020 |
#638 in Programming languages
275KB
4K
SLoC
Contains (static library, 120KB) lib/src/zig-cache/lib/libstd.a
ezc
Compiler for ez
.
This is for an independent study in school.
Goals
- To learn a lot
ez
should resemble english- Use only rust standard library
- Write a (minimal) working compiler. probably only u64 but maybe arrays
- Write a (minimal) standard library for
ez
in another language (zig, rust, c, asm, ..)
Instructions
To run just do ezc file
use -g
flag for debug info (it will generate a out.asm file). then you can open in gdb or lldb
To get the standard library pass -stdlib-path /path/to/stdlib
to the compiler. To compile the standard library, go into the lib directory in this compiler. Then run zig build
in that directory and find the library in zig-cache/lib/libstd.a
. You will probably need pretty close to master branch zig. You can find that here: https://ziglang.org/download/.
To test the code: cargo test
To test the generated code you can do cd tests; ./test.sh
. Note: this requires gcc
.
Dependencies:
- Zig (master). NOTE: If you want to build without zig run
HAS_NO_ZIG=1 cargo ...(whatever command you want)
. This may be useful if you are on a system without zig or want to provide your own standard library. - nasm
- cargo
- gcc (only for testing)
Resources
- http://www.eis.mdx.ac.uk/staffpages/r_bornat/books/compiling.pdf - book about compilers
- http://www.egr.unlv.edu/~ed/assembly64.pdf - book about x86-64 assembly
- https://ruslanspivak.com/lsbasi-part1/ - this blog series as a reference to the frontend of a compiler
- godbolt.org - an interactive webpage to explore how compilers work on the backend
- http://tinf2.vub.ac.be/~dvermeir/courses/compilers/compilers.pdf - book about compilers.
- https://github.com/ziglang/zig - source code for another programming language
- http://www.cs.ecu.edu/karl/5220/spr16/Notes/Lexical/finitestate.html - explanation of a lexer as a state machine
- https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/index.html - another tutorial about compilers. it is by the leader in the industry compiler toolchain (llvm)
- http://www.cs.man.ac.uk/~pjj/cs2111/ho/node10.html - stack based code generation for expressions
- https://craftinginterpreters.com/ - book about interpreters. could be useful
- https://wiki.osdev.org/System_V_ABI talks about this systemv abi: used for calling conventions. this also does https://wiki.osdev.org/Calling_Conventions
Features
-
lexer
-
ast (structs for ast items)
-
parser
-
codegen
-
immutable assignments
-
mutable variables
-
semantic analysis.
-
expressions (the start of recursive parsing)
-
if statements
-
loops
-
fancy compile errors (with carets)
-
functions
-
modules
-
char literals
-
standard library
-
io
-
arrays and string literals
-
finish blog bost
-
finish documentation
-
remove all the
TODO
s