87 lines
2.2 KiB
Rust
87 lines
2.2 KiB
Rust
use std::fs;
|
|
// Ch8Asm
|
|
// Converts well formed CH8ASM.
|
|
// no variables.
|
|
// no labels.
|
|
// nothing fun.
|
|
use pest::Parser;
|
|
use pest_derive::Parser;
|
|
|
|
#[derive(Parser)]
|
|
#[grammar = "chip8_asm.pest"]
|
|
pub struct Chip8AsmParser;
|
|
|
|
fn main() {
|
|
println!("Taxation is Theft");
|
|
|
|
|
|
|
|
let unparsed = fs::read_to_string("resources/test/gemma_disassembler_1_chip_logo_ch8_asm.asc").expect("Unable to read input");
|
|
|
|
let file = Chip8AsmParser::parse(Rule::file, &unparsed).expect("Unable to parse. Try again.")
|
|
.next().unwrap();
|
|
|
|
for record in file.into_inner() {
|
|
match record.as_rule() {
|
|
Rule::instruction => {
|
|
println!("INSTRUCTION = {:?}", record.into_inner().flatten())
|
|
}
|
|
_ => {
|
|
println!("UNHANDLED PART.");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
mod test {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn bits_all_parse() {
|
|
println!("PARSED: {:?}",
|
|
Chip8AsmParser::parse(Rule::instruction, "CLS")
|
|
);
|
|
println!("PARSED: {:?}",
|
|
Chip8AsmParser::parse(Rule::parameter, "0x01")
|
|
);
|
|
let parsed = Chip8AsmParser::parse(Rule::comment, "; comment").unwrap();
|
|
for i in parsed {
|
|
println!("PARSED COMMENT -> {:?}", i);
|
|
}
|
|
|
|
let parsed =
|
|
Chip8AsmParser::parse(Rule::record, "CLS ; comment").unwrap();
|
|
for i in parsed {
|
|
println!("RULE PAIR THING: {:?}", i);
|
|
}
|
|
|
|
let parsed = Chip8AsmParser::parse(Rule::record, "ADDI 0x01 ; comment");
|
|
for i in parsed {
|
|
println!("RULE PAIR THING: {:?}", i);
|
|
}
|
|
|
|
|
|
let parsed = Chip8AsmParser::parse(Rule::record, "ADDI ; comment");
|
|
for i in parsed {
|
|
println!("RULE PAIR THING: {:?}", i);
|
|
}
|
|
|
|
|
|
println!("PARSED: {:?}",
|
|
Chip8AsmParser::parse(Rule::record, "ADD 0x01 0x02 ; Comment")
|
|
);
|
|
|
|
println!("PARSED: {:?}",
|
|
Chip8AsmParser::parse(Rule::record, "ADD ADD ADD")
|
|
);
|
|
|
|
println!("PARSED: {:?}",
|
|
Chip8AsmParser::parse(Rule::record, "ADD 0x01 0x02 ; Comment")
|
|
);
|
|
|
|
println!("PARSED: {:?}",
|
|
Chip8AsmParser::parse(Rule::record, "ADD 0x01 0x02 ; Comment")
|
|
);
|
|
|
|
}
|
|
} |