2024-12-21 14:05:27 +01:00
|
|
|
# Elna programming language
|
|
|
|
|
2025-01-12 10:35:24 +01:00
|
|
|
Elna is a simple, imperative, low-level programming language.
|
|
|
|
|
|
|
|
It is intendet to accompany other languages in the areas, where a high-level
|
|
|
|
language doesn't fit well. It is also supposed to be an intermediate
|
|
|
|
representation for a such high-level hypothetical programming language.
|
2024-12-21 14:05:27 +01:00
|
|
|
|
|
|
|
## File extension
|
|
|
|
|
|
|
|
.elna
|
|
|
|
|
2025-01-12 10:35:24 +01:00
|
|
|
## Current implementation
|
|
|
|
|
|
|
|
This repository contains a GCC frontend for Elna. After finishing the frontend
|
|
|
|
I'm planning to rewrite the compiler in Elna itself with its own backend and
|
|
|
|
a hand-written parser. So GCC gives a way to have a simple bootstrap compiler
|
|
|
|
and a possbility to compile Elna programs for different platforms.
|
|
|
|
|
|
|
|
## Grammar
|
|
|
|
|
2025-02-04 13:28:09 +01:00
|
|
|
Flex and bison grammar specifications, `lexer.ll` and `parser.yy`, can be found
|
|
|
|
in the `boot/` directory.
|
2025-02-14 08:05:03 +01:00
|
|
|
|
|
|
|
## Build
|
|
|
|
|
|
|
|
The frontend requires GCC 14.2.0 (not tested with other versions).
|
|
|
|
|
|
|
|
Download the GCC source. Copy the contents of this repository into `gcc/elna`
|
|
|
|
inside GCC. Finally build GCC enabling the frontend with
|
|
|
|
`--enable-languages=c,c++,elna`. After the installation the compiler can be
|
|
|
|
invoked with `$prefix/bin/gelna`.
|
|
|
|
|
|
|
|
There is also a `Rakefile` that downloads, builds and installs GCC into the
|
|
|
|
`./build/` subdirectory. The `Rakefile` assumes that ruby and rake, as well as
|
|
|
|
all GCC dependencies are already available in the system. It works under Linux
|
|
|
|
and Mac OS. In the latter case GCC is patched with the patches used by Homebrew
|
|
|
|
(official GCC doesn't support Apple silicon targets). Invoke with
|
|
|
|
|
|
|
|
```sh
|
|
|
|
rake boot
|
|
|
|
```
|
|
|
|
|
|
|
|
See `rake -T` for more tasks. The GCC source is under `build/tools`. The
|
|
|
|
installation path is `build/host/install`.
|