Some basic parsing works (fixing order of operations), and one test case.

This commit is contained in:
2020-08-13 10:15:32 -07:00
parent 2881c5104a
commit 91d5d1b4fd
7 changed files with 137 additions and 50 deletions

View File

@@ -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);
}