Merge pull request #8 from erindesu/master

This commit is contained in:
Able 2021-04-13 11:04:17 -05:00 committed by GitHub
commit 35586aa700
3 changed files with 40 additions and 10 deletions

View file

@ -1,11 +1,10 @@
extern crate clap;
use clap::{App, Arg};
mod base_55;
mod parser;
pub mod tokens;
mod scanner;
mod tokens;
use logos::Logos;
use clap::{App, Arg};
use scanner::Scanner;
fn main() {
let matches = App::new("AbleScript")
@ -27,10 +26,8 @@ fn main() {
let source = std::fs::read_to_string(file_path).unwrap();
// Print token type: `value`
let mut lex = tokens::Token::lexer(&source);
while let Some(token) = lex.next() {
println!("{:?}: `{}`", token, lex.slice());
}
let mut scanner = Scanner::new(&source);
scanner.scan();
}
None => {
println!("hi");

View file

@ -1,4 +1,4 @@
use crate::tokens::{Abool, Token};
use crate::tokens::Abool;
pub fn abool2num(abool: Abool) -> i32 {
match abool {

View file

@ -0,0 +1,33 @@
use std::ops::Range;
use logos::Logos;
use crate::tokens::{self, Token};
pub struct Scanner<'a> {
source: &'a str,
lexer: logos::Lexer<'a, Token>,
}
impl<'a> Scanner<'a> {
pub fn new(source: &'a str) -> Self {
Self {
source,
lexer: tokens::Token::lexer(source),
}
}
pub fn scan(&mut self) {
while let Some(tok) = self.lexer.next() {
if matches!(tok, Token::Error) {
self.throw_err(&self.lexer.span());
} else {
println!("Token: {:?}", tok);
}
}
}
fn throw_err(&self, location: &Range<usize>) {
let part = &self.source[location.clone()];
println!("Unknown keyword `{}` found on {:?}", part, location);
}
}