Fix a good portion of the build errors in sibillexer (but not all...)
This commit is contained in:
parent
f21148381e
commit
31c68034a8
1 changed files with 18 additions and 20 deletions
|
@ -3,18 +3,13 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
use sibiltypes::{Bool, Char};
|
use sibiltypes::Object;
|
||||||
|
use sibiltypes::number::Exact;
|
||||||
|
|
||||||
use char::Lexable;
|
use char::{FromChar, Lexable};
|
||||||
use named_char;
|
use number::{NumberBuilder, Radix, Sign};
|
||||||
use number::Exactness;
|
use str::{CharAt, RelativeIndexable};
|
||||||
use number::NumberBuilder;
|
use token::{Lex, Token};
|
||||||
use number::Radix;
|
|
||||||
use number::Sign;
|
|
||||||
use str::CharAt;
|
|
||||||
use str::RelativeIndexable;
|
|
||||||
use token::Lex;
|
|
||||||
use token::Token;
|
|
||||||
|
|
||||||
type StateResult = Result<Option<Token>, String>;
|
type StateResult = Result<Option<Token>, String>;
|
||||||
|
|
||||||
|
@ -32,7 +27,7 @@ enum State {
|
||||||
Dot,
|
Dot,
|
||||||
Hash,
|
Hash,
|
||||||
Number,
|
Number,
|
||||||
NumberExactness,
|
NumberExact,
|
||||||
NumberDecimal,
|
NumberDecimal,
|
||||||
NumberRadix,
|
NumberRadix,
|
||||||
NumberSign,
|
NumberSign,
|
||||||
|
@ -203,7 +198,7 @@ impl Lexer {
|
||||||
self.advance();
|
self.advance();
|
||||||
let lower_c = c.to_lowercase().collect::<String>();
|
let lower_c = c.to_lowercase().collect::<String>();
|
||||||
let mut candidates: HashSet<&str> = HashSet::new();
|
let mut candidates: HashSet<&str> = HashSet::new();
|
||||||
for c in named_char::set().iter() {
|
for c in names::set().iter() {
|
||||||
if c.starts_with(&lower_c) {
|
if c.starts_with(&lower_c) {
|
||||||
candidates.insert(c);
|
candidates.insert(c);
|
||||||
}
|
}
|
||||||
|
@ -211,7 +206,7 @@ impl Lexer {
|
||||||
if candidates.len() > 0 {
|
if candidates.len() > 0 {
|
||||||
self.state = State::NamedChar(candidates, lower_c);
|
self.state = State::NamedChar(candidates, lower_c);
|
||||||
} else {
|
} else {
|
||||||
return self.token_result(Token::Character(Char(c)));
|
return self.token_result(Token::Character(Object::Char(c)));
|
||||||
}
|
}
|
||||||
Ok(None)
|
Ok(None)
|
||||||
}
|
}
|
||||||
|
@ -226,7 +221,8 @@ impl Lexer {
|
||||||
if c.is_identifier_delimiter() || c.is_eof() {
|
if c.is_identifier_delimiter() || c.is_eof() {
|
||||||
if progress.len() == 1 {
|
if progress.len() == 1 {
|
||||||
self.retract();
|
self.retract();
|
||||||
return self.token_result(Token::Character(Char(progress.chars().next().unwrap())));
|
let token_char = Object::Char(progress.chars().next().unwrap());
|
||||||
|
return self.token_result(Token::Character(token_char));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return self.generic_error(c);
|
return self.generic_error(c);
|
||||||
|
@ -243,7 +239,8 @@ impl Lexer {
|
||||||
if candidates.len() == 1 {
|
if candidates.len() == 1 {
|
||||||
let candidate = *candidates.iter().next().unwrap();
|
let candidate = *candidates.iter().next().unwrap();
|
||||||
if candidate == &progress {
|
if candidate == &progress {
|
||||||
self.token_result(Token::Character(named_char::char_named_by(&progress)))
|
let token_char = Object::from_char_named(&progress);
|
||||||
|
self.token_result(Token::Character(token_char))
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
self.state = State::NamedChar(candidates, progress);
|
self.state = State::NamedChar(candidates, progress);
|
||||||
|
@ -283,7 +280,8 @@ impl Lexer {
|
||||||
fn state_hash(&mut self, c: char) -> StateResult {
|
fn state_hash(&mut self, c: char) -> StateResult {
|
||||||
if c.is_boolean_true() || c.is_boolean_false() {
|
if c.is_boolean_true() || c.is_boolean_false() {
|
||||||
self.advance();
|
self.advance();
|
||||||
return self.token_result(Token::Boolean(Bool(c.is_boolean_true())));
|
let token_bool = Object::Bool(c.is_boolean_true());
|
||||||
|
return self.token_result(Token::Boolean(token_bool));
|
||||||
}
|
}
|
||||||
else if c.is_left_paren() {
|
else if c.is_left_paren() {
|
||||||
self.advance();
|
self.advance();
|
||||||
|
@ -298,9 +296,9 @@ impl Lexer {
|
||||||
self.state = State::NumberRadix;
|
self.state = State::NumberRadix;
|
||||||
self.advance();
|
self.advance();
|
||||||
}
|
}
|
||||||
else if let Some(exactness) = Exactness::from_char(c) {
|
else if let Some(exactness) = Exact::from_char(c) {
|
||||||
self.number_builder.exact(exactness);
|
self.number_builder.exact(exactness);
|
||||||
self.state = State::NumberExactness;
|
self.state = State::NumberExact;
|
||||||
self.advance();
|
self.advance();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -492,7 +490,7 @@ impl Iterator for Lexer {
|
||||||
State::Initial => self.state_initial(c),
|
State::Initial => self.state_initial(c),
|
||||||
State::Number => self.state_number(c),
|
State::Number => self.state_number(c),
|
||||||
State::NumberDecimal => self.state_number_decimal(c),
|
State::NumberDecimal => self.state_number_decimal(c),
|
||||||
State::NumberExactness => self.state_number_exactness(c),
|
State::NumberExact => self.state_number_exactness(c),
|
||||||
State::NumberRadix => self.state_number_radix(c),
|
State::NumberRadix => self.state_number_radix(c),
|
||||||
State::NumberSign => self.state_number_sign(c),
|
State::NumberSign => self.state_number_sign(c),
|
||||||
State::Sign => self.state_sign(c),
|
State::Sign => self.state_sign(c),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue