in z3tracer/src/lexer.rs [111:146]
fn read_symbol(&mut self) -> RawResult<Symbol> {
let mut bytes = Vec::new();
if let Some(b'|') = self.peek_byte() {
self.consume_byte();
while let Some(c) = self.peek_byte() {
if *c == b'|' {
self.consume_byte();
self.skip_spaces();
let s = String::from_utf8(bytes).map_err(RawError::InvalidUtf8String)?;
return Ok(Symbol(s));
}
if *c == b'\n' {
return Err(RawError::UnexpectedChar(Some(*c as char), vec!['|']));
}
bytes.push(*c);
self.consume_byte();
}
return Err(RawError::UnexpectedChar(None, vec!['|']));
}
// Normal case
while let Some(c) = self.peek_byte() {
let c = *c;
if c == b' ' {
self.consume_byte();
self.skip_spaces();
break;
}
if c == b'\n' || c == b';' || c == b'(' || c == b')' {
break;
}
bytes.push(c);
self.consume_byte();
}
let s = String::from_utf8(bytes).map_err(RawError::InvalidUtf8String)?;
Ok(Symbol(s))
}