Having an analyzed program (and its matching symbol table), it is easy also to create a program that translates it into another language. To avoid introducing a new language, the Rust language has been used here as a target language, but translating to other high-level languages would be no more difficult.
To run it, go into the calc_compiler folder and type cargo run data/sum.calc. After compiling the project, the program will print the following:
Compiled data/sum.calc to data/sum.rs
If you go into the data subfolder, you will find the new sum.rs file, containing the following code:
use std::io::Write;
#[allow(dead_code)]
fn input() -> f64 {
let mut text = String::new();
eprint!("? ");
std::io::stderr().flush().unwrap();
std::io::stdin()
.read_line(&mut text)
.expect("Cannot read line.");
text.trim().parse::<f64>().unwrap_or(0.)
}
fn main() {
let mut _a = 0.0;
let mut _b = 0.0;
_a...