Expand description
scanlex implements a simple lexical scanner.
Tokens are returned by repeatedly calling the get method,
(which will return Token::End if no tokens are left)
or by iterating over the scanner.
They represent floats (stored as f64), integers (as i64), characters, identifiers,
or single or double quoted strings. There is also Token::Error to
indicate a badly formed token. This lexical scanner makes some
sensible assumptions, such as a number may not be directly followed
by a letter, etc. No attempt is made in this version to decode C-style
escape codes in strings. All whitespace is ignored.
§Examples
use scanlex::{Scanner,Token};
let mut scan = Scanner::new("iden 'string' * 10");
assert_eq!(scan.get(),Token::Iden("iden".into()));
assert_eq!(scan.get(),Token::Str("string".into()));
assert_eq!(scan.get(),Token::Char('*'));
assert_eq!(scan.get(),Token::Int(10));
assert_eq!(scan.get(),Token::End);The scanner struct implements iterator, so:
let v: Vec<_> = scanlex::Scanner::new("bonzo 42 dog (cat)")
.filter_map(|t| t.to_iden()).collect();
assert_eq!(v,&["bonzo","dog","cat"]);Structs§
- Scan
Error - a scanner error type
- Scan
Lines - used to generate Scanner structs for each line
- Scanner
- a struct for lexical scanning of a string
Enums§
- Token
- Represents a token returned by
Scanner::get