56 lines
1.7 KiB
Plaintext
56 lines
1.7 KiB
Plaintext
# Elna programming language
|
|
|
|
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.
|
|
|
|
## File extension
|
|
|
|
.elna
|
|
|
|
## 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 PL/0
|
|
|
|
program = [ "type" type_definitions ";" ]
|
|
block "." ;
|
|
|
|
block = [ "const" ident "=" number {"," ident "=" number} ";"]
|
|
[ "var" ident {"," ident} ";"]
|
|
{ "procedure" ident ";" block ";" } statement ;
|
|
|
|
statement = [ ident ":=" expression | "call" ident
|
|
| "?" ident | "!" expression
|
|
| "begin" statement {";" statement } "end"
|
|
| "if" condition "then" statement
|
|
| "while" condition "do" statement ];
|
|
|
|
condition = "odd" expression |
|
|
expression ("="|"#"|"<"|"<="|">"|">=") expression ;
|
|
|
|
expression = [ "+"|"-"] term { ("+"|"-") term};
|
|
|
|
term = factor {("*"|"/") factor};
|
|
|
|
factor = ident | number | "(" expression ")";
|
|
|
|
type_expression = "array" number "of" type_expression
|
|
| "^" type_expression
|
|
| "record" field_list "end"
|
|
| ident
|
|
|
|
field_list = ident ":" type_expression { ";" field_list }
|
|
|
|
## Operations
|
|
|
|
"!" - Write a line.
|
|
"?" - Read user input.
|
|
"odd" - The only function, returns whether a number is odd.
|