refactor(lexer, ast): Rewrite decl with c standard grammar of decl
This commit is contained in:
+15
-1
@@ -1,4 +1,4 @@
|
||||
use std::str::FromStr;
|
||||
use std::{str::FromStr, sync::LazyLock};
|
||||
|
||||
use thiserror::Error;
|
||||
|
||||
@@ -330,6 +330,17 @@ fn parse_puncuation(
|
||||
Ok(token_value)
|
||||
}
|
||||
|
||||
// static KEYWORDS: LazyLock<HashMap<&'static str, TokenValue>> = LazyLock::new(|| {
|
||||
// let mut m = HashMap::new();
|
||||
// m.insert("if", TokenValue::If);
|
||||
// m.insert("else", TokenValue::Else);
|
||||
// m.insert("while", TokenValue::While);
|
||||
// m.insert("for", TokenValue::For);
|
||||
// m.insert("return", TokenValue::Return);
|
||||
// m.insert("break", TokenValue::Break);
|
||||
// m.insert("continue", TokenValue::Continue);
|
||||
// m
|
||||
// });
|
||||
fn parse_ident(
|
||||
str_iter: &mut Cursor,
|
||||
) -> Result<TokenValue, LexParseError> {
|
||||
@@ -370,6 +381,9 @@ fn parse_ident(
|
||||
if name.eq("continue") {
|
||||
return Ok(TokenValue::Continue);
|
||||
}
|
||||
if name.eq("static") {
|
||||
return Ok(TokenValue::Static);
|
||||
}
|
||||
if let Some(type_ident) = TypeIdent::from_str(&name).ok() {
|
||||
return Ok(TokenValue::TypeIdent(type_ident));
|
||||
}
|
||||
|
||||
+3
-2
@@ -25,7 +25,7 @@ pub enum TokenValue {
|
||||
LBracket, RBracket,
|
||||
Comma, Semicolon,
|
||||
|
||||
If, Else, While, For, Return, Break, Continue,
|
||||
If, Else, While, For, Return, Break, Continue, Static,
|
||||
|
||||
Eof,
|
||||
Unrecognized,
|
||||
@@ -84,6 +84,7 @@ impl std::fmt::Display for TokenValue {
|
||||
TokenValue::Return => write!(f, "return"),
|
||||
TokenValue::Break => write!(f, "break"),
|
||||
TokenValue::Continue => write!(f, "continue"),
|
||||
TokenValue::Static => write!(f, "static"),
|
||||
TokenValue::Eof => write!(f, "end of input"),
|
||||
TokenValue::Unrecognized => write!(f, "unrecognized"),
|
||||
}
|
||||
@@ -104,7 +105,7 @@ pub enum TokenKind {
|
||||
LBracket, RBracket,
|
||||
Comma, Semicolon,
|
||||
|
||||
If, Else, While, For, Return, Break, Continue,
|
||||
If, Else, While, For, Return, Break, Continue, Static,
|
||||
|
||||
Eof,
|
||||
Unrecognized,
|
||||
|
||||
Reference in New Issue
Block a user