# 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.