use super::redcode::traits::Instruction;
use std::collections::HashMap;
#[allow(dead_code, unused_variables)]
pub type ParseResult<T> = Result<T, ParseError>;
#[allow(dead_code, unused_variables)]
struct Lexer<'a>
{
input: &'a str,
output: &'a mut Vec<Token<'a>>
}
#[allow(dead_code, unused_variables)]
struct Parser<'a, T: 'a>
where T: Instruction
{
sym_table: HashMap<String, String>,
input: &'a Vec<Token<'a>>,
output: &'a mut Vec<T>
}
#[allow(dead_code, unused_variables)]
pub struct ParseError;
#[allow(dead_code, unused_variables)]
enum ParseErrorKind {}
#[allow(dead_code, unused_variables)]
struct Token<'a>
{
content: &'a str,
start: usize,
end: usize,
kind: TokenKind,
}
#[allow(dead_code, unused_variables)]
enum TokenKind
{
Label,
OpCode,
OpMode,
AddressingMode,
Symbol,
Number,
Identifier,
}
#[allow(dead_code, unused_variables)]
pub fn parse_into<T>(program_str: &str, buf: &mut Vec<T>)
-> ParseResult<()>
where T: Instruction
{
let tokens = lex(program_str);
unimplemented!();
}
#[allow(dead_code, unused_variables)]
pub fn parse<T>(program_str: &str)
-> ParseResult<Vec<T>>
where T: Instruction
{
let mut v = vec![];
parse_into(program_str, &mut v)?;
Ok(v)
}
#[allow(dead_code, unused_variables)]
fn lex<'a>(program_str: &'a str)
-> ParseResult<Vec<Token<'a>>>
{
let mut buf = vec![];
lex_into(program_str, &mut buf)?;
Ok(buf)
}
fn lex_into<'a>(program_str: &'a str, buf: &'a mut Vec<Token>)
-> ParseResult<()>
{
unimplemented!();
Ok(())
}
#[allow(dead_code, unused_variables)]
fn parse_tokens<T>(program_str: Vec<Token>)
-> ParseResult<Vec<T>>
where T: Instruction
{
let mut v = vec![];
parse_tokens_into(program_str, &mut v)?;
Ok(v)
}
#[allow(dead_code, unused_variables)]
fn parse_tokens_into<T>(program_str: Vec<Token>, buf: &mut Vec<T>)
-> ParseResult<()>
where T: Instruction
{
unimplemented!();
}