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") ); } }