use std::collections::HashMap;
#[derive(Debug, PartialEq, Clone, Copy)]
pub enum TokenKind {
Hash,
Shebang,
Identifier,
Text,
Keyword(Keyword),
Path,
ShebangText,
}
#[derive(Debug, PartialEq, Clone, Copy)]
pub enum Keyword {
Use,
Region,
EndRegion,
}
#[derive(Debug)]
pub struct Token {
pub token_kind: TokenKind,
pub lexeme: String,
pub start_line: u16,
pub end_line: u16,
}
pub struct KeywordTable {
pub table: HashMap<String, TokenKind>,
}
impl KeywordTable {
pub fn new() -> Self {
let mut table = HashMap::new();
table.insert("REGION".to_string(), TokenKind::Keyword(Keyword::Region));
table.insert("ENDREGION".to_string(), TokenKind::Keyword(Keyword::EndRegion));
table.insert("USE".to_string(), TokenKind::Keyword(Keyword::Use));
table.insert("ОБЛАСТЬ".to_string(), TokenKind::Keyword(Keyword::Region));
table.insert("КОНЕЦОБЛАСТИ".to_string(), TokenKind::Keyword(Keyword::EndRegion));
table.insert("ИСПОЛЬЗОВАТЬ".to_string(), TokenKind::Keyword(Keyword::Use));
return KeywordTable { table };
}
}
impl Token {
pub fn new(token_kind: TokenKind, lexeme: String, start_line: u16, end_line: u16) -> Token {
Token { token_kind, lexeme, start_line, end_line }
}
}