Browse Source

Add parser

master
garritfra 4 years ago
parent
commit
e576ec4783
  1. 20
      src/lexer.rs
  2. 9
      src/main.rs
  3. 11
      src/opcodes.rs

20
src/lexer.rs

@ -0,0 +1,20 @@
use crate::opcodes::OpCode;
pub fn lex(input: &str) -> Vec<OpCode> {
let mut tokens: Vec<OpCode> = Vec::new();
for (_, character) in input.chars().enumerate() {
match character {
'+' => tokens.push(OpCode::Increment),
'-' => tokens.push(OpCode::Decrement),
'>' => tokens.push(OpCode::MoveRight),
'<' => tokens.push(OpCode::MoveLeft),
'.' => tokens.push(OpCode::Print),
',' => tokens.push(OpCode::Read),
'[' => tokens.push(OpCode::LoopStart),
']' => tokens.push(OpCode::LoopEnd),
_ => (),
}
}
tokens
}

9
src/main.rs

@ -1,3 +1,10 @@
mod lexer;
mod opcodes;
use opcodes::OpCode;
fn main() {
println!("Hello, world!");
let tokens: Vec<OpCode> = lexer::lex("++++++ [ > ++++++++++ < - ] > +++++ .");
for token in tokens {
println!("{:?}", token);
}
}

11
src/opcodes.rs

@ -0,0 +1,11 @@
#[derive(Debug)]
pub enum OpCode {
Increment,
Decrement,
MoveRight,
MoveLeft,
Print,
Read,
LoopStart,
LoopEnd,
}
Loading…
Cancel
Save