Some basic parsing works (fixing order of operations), and one test case.
This commit is contained in:
@@ -2,11 +2,10 @@ use crate::util::istring::InternedString;
|
||||
use logos::{Lexer, Logos};
|
||||
use std::num::ParseIntError;
|
||||
|
||||
#[derive(Logos,Clone,Debug,PartialEq)]
|
||||
#[derive(Logos, Clone, Debug, PartialEq)]
|
||||
pub enum Token {
|
||||
#[regex(r"[ \t\n\f]+", logos::skip)]
|
||||
#[regex(r"//.*", logos::skip)]
|
||||
|
||||
#[token("=")]
|
||||
Equals,
|
||||
|
||||
@@ -37,10 +36,13 @@ impl Token {
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_number<'a,'src>(base: Option<u8>, value: &'a Lexer<'src, Token>) -> Result<(Option<u8>, i128), ParseIntError> {
|
||||
fn parse_number<'a, 'src>(
|
||||
base: Option<u8>,
|
||||
value: &'a Lexer<'src, Token>,
|
||||
) -> Result<(Option<u8>, i128), ParseIntError> {
|
||||
let (radix, strval) = match base {
|
||||
None => (10, value.slice()),
|
||||
Some(radix) => (radix, &value.slice()[2..]),
|
||||
None => (10, value.slice()),
|
||||
Some(radix) => (radix, &value.slice()[2..]),
|
||||
};
|
||||
|
||||
println!("HERE! (radix {}, slice |{}|", radix, strval);
|
||||
@@ -80,4 +82,3 @@ fn lexer_spans() {
|
||||
assert_eq!(lex0.next(), Some((Token::Number((None, 1)), 8..9)));
|
||||
assert_eq!(lex0.next(), None);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user