Frontend for language
Tiny beginnings of a parser for a toy language, written in C99.
Currently only capable of parsing simple arithmetic expressions, limited to positive numbers, addition, subtraction, multiplication, and division.
Compiling
To build frontend:
make
Running
Simply run ./frontend INPUT_FILE and it should parse and print the resulting
AST in polish notation with surrounding parenthesis,
ie. 1 + 2 * 3 turns into ( + 1 ( * 2 3 ) ),
and 1 + 2 + 3 becomes ( + ( + 1 2 ) 3 ).
Example input can be found in the program.input file.
Next steps
- Allocating all memory up front, an inefficient but very simple use of memory
would exploit the fact that the number of lines and tokens is bounded by the total
number of bytes in
INPUT_FILE, and the number of sub-expressions are bounded by the number of tokens, so a naive approach is to allocatelength(INPUT_FILE) * sizeof(char + line_t + expression_t). - Streaming parsing; the implementation currently supports reading a limited amount of input at each step, extending it to "pause-at-X" and resume once more input is available should be a trivial feat.
- Fix precedence implementation, currently we just compare operators, which is unmaintainable and inefficient once the grammar is extended.
- Extend the arithmetic grammar to support more operators.
- Boolean grammar parsing.
- Argument parsing to better control the output and debug different parts of the implementation.
- Tests.
Currently only simple arithmetic is implemented.
