Add characters module
This commit is contained in:
parent
ac4cff9a51
commit
f02240da87
3 changed files with 84 additions and 36 deletions
52
src/lexer.rs
52
src/lexer.rs
|
@ -1,41 +1,6 @@
|
|||
//! # Lexer
|
||||
|
||||
mod characters {
|
||||
use std::collections::HashSet;
|
||||
use std::iter::FromIterator;
|
||||
|
||||
pub type CharSet = HashSet<char>;
|
||||
|
||||
pub fn ascii_letters() -> CharSet {
|
||||
let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".chars();
|
||||
return CharSet::from_iter(letters);
|
||||
}
|
||||
|
||||
pub fn ascii_digits() -> CharSet {
|
||||
let digits = "1234567890".chars();
|
||||
return CharSet::from_iter(digits);
|
||||
}
|
||||
|
||||
pub fn identifier_initials() -> CharSet {
|
||||
let letters = ascii_letters();
|
||||
let extras = CharSet::from_iter("!$%&*/:<=>?~_^".chars());
|
||||
let mut initials = CharSet::new();
|
||||
initials.extend(letters.iter());
|
||||
initials.extend(extras.iter());
|
||||
return initials;
|
||||
}
|
||||
|
||||
pub fn identifier_subsequents() -> CharSet {
|
||||
let initials = identifier_initials();
|
||||
let digits = ascii_digits();
|
||||
let extras = CharSet::from_iter(".+-".chars());
|
||||
let mut subsequents = CharSet::new();
|
||||
subsequents.extend(initials.iter());
|
||||
subsequents.extend(digits.iter());
|
||||
subsequents.extend(extras.iter());
|
||||
return subsequents;
|
||||
}
|
||||
}
|
||||
use characters;
|
||||
|
||||
enum Kind {
|
||||
LeftParen,
|
||||
|
@ -48,6 +13,21 @@ struct Token {
|
|||
value: String,
|
||||
}
|
||||
|
||||
struct Lexer {
|
||||
input: str,
|
||||
}
|
||||
|
||||
impl Lexer {
|
||||
}
|
||||
|
||||
impl Iterator for Lexer {
|
||||
type Item = Token;
|
||||
|
||||
fn next(&mut self) -> Option<Token> {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
pub fn hello(person: &str) {
|
||||
println!("Hello, {}!", person);
|
||||
for (idx, c) in person.char_indices() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue