Move parser util functions into separate module
This commit is contained in:
parent
101437d9fe
commit
4c085e89d4
1 changed files with 61 additions and 56 deletions
|
@ -1,5 +1,6 @@
|
||||||
use crate::compiler::{
|
use crate::compiler::{
|
||||||
ast::Expression::{self, *},
|
ast::Expression::{self, *},
|
||||||
|
parser::parser_utilities::*,
|
||||||
token::{Token, TokenType},
|
token::{Token, TokenType},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -131,7 +132,10 @@ fn parse_identifier<'source>(pos: &mut usize, tokens: &[Token<'source>]) -> Expr
|
||||||
Identifier(token.text)
|
Identifier(token.text)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn consume_string<'source>(
|
mod parser_utilities {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
pub fn consume_string<'source>(
|
||||||
pos: &mut usize,
|
pos: &mut usize,
|
||||||
tokens: &[Token<'source>],
|
tokens: &[Token<'source>],
|
||||||
expected_string: &str,
|
expected_string: &str,
|
||||||
|
@ -139,7 +143,7 @@ fn consume_string<'source>(
|
||||||
consume_strings(pos, tokens, &[expected_string])
|
consume_strings(pos, tokens, &[expected_string])
|
||||||
}
|
}
|
||||||
|
|
||||||
fn consume_strings<'source>(
|
pub fn consume_strings<'source>(
|
||||||
pos: &mut usize,
|
pos: &mut usize,
|
||||||
tokens: &[Token<'source>],
|
tokens: &[Token<'source>],
|
||||||
strings: &[&str],
|
strings: &[&str],
|
||||||
|
@ -156,7 +160,7 @@ fn consume_strings<'source>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn consume_type<'source>(
|
pub fn consume_type<'source>(
|
||||||
pos: &mut usize,
|
pos: &mut usize,
|
||||||
tokens: &[Token<'source>],
|
tokens: &[Token<'source>],
|
||||||
expected_type: TokenType,
|
expected_type: TokenType,
|
||||||
|
@ -164,7 +168,7 @@ fn consume_type<'source>(
|
||||||
consume_types(pos, tokens, &[expected_type])
|
consume_types(pos, tokens, &[expected_type])
|
||||||
}
|
}
|
||||||
|
|
||||||
fn consume_types<'source>(
|
pub fn consume_types<'source>(
|
||||||
pos: &mut usize,
|
pos: &mut usize,
|
||||||
tokens: &[Token<'source>],
|
tokens: &[Token<'source>],
|
||||||
types: &[TokenType],
|
types: &[TokenType],
|
||||||
|
@ -181,13 +185,13 @@ fn consume_types<'source>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn consume<'source>(pos: &mut usize, tokens: &[Token<'source>]) -> Token<'source> {
|
pub fn consume<'source>(pos: &mut usize, tokens: &[Token<'source>]) -> Token<'source> {
|
||||||
let token = peek(pos, tokens);
|
let token = peek(pos, tokens);
|
||||||
*pos += 1;
|
*pos += 1;
|
||||||
token
|
token
|
||||||
}
|
}
|
||||||
|
|
||||||
fn peek<'source>(pos: &mut usize, tokens: &[Token<'source>]) -> Token<'source> {
|
pub fn peek<'source>(pos: &mut usize, tokens: &[Token<'source>]) -> Token<'source> {
|
||||||
if let Some(token) = tokens.get(*pos) {
|
if let Some(token) = tokens.get(*pos) {
|
||||||
token.clone()
|
token.clone()
|
||||||
} else if let Some(last_token) = tokens.get(*pos - 1) {
|
} else if let Some(last_token) = tokens.get(*pos - 1) {
|
||||||
|
@ -196,6 +200,7 @@ fn peek<'source>(pos: &mut usize, tokens: &[Token<'source>]) -> Token<'source> {
|
||||||
panic!("Input to parser appears to be empty!");
|
panic!("Input to parser appears to be empty!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
|
Reference in a new issue