This is free software. See enclosed LICENSE file for full licensing terms.
simplec demonstrates the use of yacc (bison) and lex (flex) to construct a basic compiler using C and C++.
Download Link: simplec-1.0.tar.gz
-Andrew Tomazos <andrew@tomazos.com>
The grammar of the simplec language is as follows:
CompilationUnit:
(Statement ';')+ # a compilation unit conists of
# semi-colon seperated statements
Statement:
LocalVarDecl # declare a variable: int a;
Assignment # assign a variable: a = b;
ScanStmt # read input into variable: scan a;
PrintStmt # print out a variable: print a;
LocalVarDecl:
"int" Identifier
PrintStmt:
"print" Identifier
ScanStmt:
"scan" Identifier
Assignment:
Identifier "=" Expression
Expression:
Identifier
Number
"(" Expression ")"
Expression Operator Expression
"-" Expression # negation
Operator:
"+" | "-" | "*" | "/"
To create the compiler, call make:
$ cd simplec-1.0 $ make
This will compile everything into an executable called "simplec" and then will perform a test. Ideally you should see "test passed".
To use the resulting "simplec", write a program with the above grammar. (See "test_program" for an example). Save it to a file "my_program" and then execute it as follows:
$ simplec my_program
Standard input is used for scan statements, standard output is used for print statements. They can be redirected.
To execute the included test manually do the following:
$ simplec test_program < test_input > test_output $ diff test_output test_expected
Have fun,
Andrew.