🌱 A simple programming language. 24 Commits
2023-10-31 21:13:14 +01:00
examples Improved project structure 2023-10-20 17:07:44 +02:00
src Improved tokenizer 2023-10-31 21:13:14 +01:00
.gitignore Initial commit 2023-10-17 11:06:14 +02:00
go.mod Added file scanner 2023-10-30 16:17:41 +01:00
go.sum Added file scanner 2023-10-30 16:17:41 +01:00
main_test.go Added file scanner 2023-10-30 16:17:41 +01:00
main.go Improved project structure 2023-10-20 17:07:44 +02:00
README.md Improved consistency 2023-10-28 13:02:26 +02:00

q

A simple programming language.

Features

  • Fast compilation
  • Small binaries

Installation

git clone https://git.akyoto.dev/cli/q
cd q
go build

Usage

Build a Linux ELF executable from examples/hello:

./q build examples/hello
./examples/hello/hello

Documentation

main.go

Entry point. It simply calls cli.Main which we can use for testing.

src/cli/Main.go

The command line interface expects a command like build as the first argument. Commands are implemented as functions in the src/cli directory. Each command has its own set of parameters.

src/cli/Build.go

The build command creates a new Build instance with the given directory and calls the Run method.

If no directory is specified, it will use the current directory.

If the --dry flag is specified, it will perform all tasks except the final write to disk. This flag should be used in most tests and benchmarks to avoid needless disk writes.

q build
q build examples/hello
q build examples/hello --dry

src/build/Build.go

The Build type defines all the information needed to start building an executable file. The name of the executable will be equal to the name of the build directory.

Run starts the build which will scan all files in the build directory. The functions found in the scan will be translated to generic assembler instructions. All the functions that are required to run the program will be added to final assembler. The final assembler resolves label addresses, optimizes the performance and generates the specific x86-64 machine code from the generic instruction set.

The Run method is currently not fully implemented.

Tests

go test -coverpkg=./...

Benchmarks

go test -bench=. -benchmem

License

Please see the license documentation.

© 2023 Eduard Urbach