Break token stuff into a separate source file
This commit is contained in:
parent
8d9cfd86f8
commit
d333819dee
2 changed files with 43 additions and 38 deletions
|
@ -1,49 +1,12 @@
|
||||||
//! # Lexer
|
//! # Lexer
|
||||||
|
|
||||||
use std::fmt;
|
pub mod token;
|
||||||
|
|
||||||
use characters;
|
use characters;
|
||||||
use characters::CharAt;
|
use characters::CharAt;
|
||||||
use characters::Lexable;
|
use characters::Lexable;
|
||||||
use characters::RelativeIndexable;
|
use characters::RelativeIndexable;
|
||||||
|
|
||||||
pub enum Kind {
|
|
||||||
LeftParen,
|
|
||||||
RightParen,
|
|
||||||
Identifier,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl fmt::Display for Kind {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
|
||||||
let s = match *self {
|
|
||||||
Kind::LeftParen => "LeftParen",
|
|
||||||
Kind::RightParen => "RightParen",
|
|
||||||
Kind::Identifier => "Identifier",
|
|
||||||
};
|
|
||||||
write!(f, "{}", s)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct Token {
|
|
||||||
kind: Kind,
|
|
||||||
value: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Token {
|
|
||||||
fn new(kind: Kind, value: String) -> Token {
|
|
||||||
Token {
|
|
||||||
kind: kind,
|
|
||||||
value: value,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl fmt::Display for Token {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
|
||||||
write!(f, "({}, \"{}\")", self.kind, self.value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
enum State {
|
enum State {
|
||||||
Initial,
|
Initial,
|
||||||
Identifier,
|
Identifier,
|
||||||
|
|
42
src/lexer/token.rs
Normal file
42
src/lexer/token.rs
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/// # Token
|
||||||
|
|
||||||
|
use std::fmt;
|
||||||
|
|
||||||
|
pub enum Kind {
|
||||||
|
LeftParen,
|
||||||
|
RightParen,
|
||||||
|
Identifier,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Token {
|
||||||
|
kind: Kind,
|
||||||
|
value: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Token {
|
||||||
|
fn new(kind: Kind, value: String) -> Token {
|
||||||
|
Token { kind: kind, value: value, }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Display
|
||||||
|
//
|
||||||
|
|
||||||
|
impl fmt::Display for Kind {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
let s = match *self {
|
||||||
|
Kind::LeftParen => "LeftParen",
|
||||||
|
Kind::RightParen => "RightParen",
|
||||||
|
Kind::Identifier => "Identifier",
|
||||||
|
};
|
||||||
|
write!(f, "{}", s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for Token {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
write!(f, "({}, \"{}\")", self.kind, self.value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue