use crate::endian::{Endian, ToBytes};
pub fn sack(input: &str, endian: Endian) -> Result<Vec<u8>> {
+ let mut lexer = Lexer::new(input, endian)?;
+ while let Some(ref token) = lexer.token {
+ println!("{token:?}");
+ lexer.get()?;
+ }
+
let mut symbol_table = HashMap::new();
let output = _sack(input, endian, &mut symbol_table)?;
let output = if !symbol_table.is_empty() {
Ok(())
}
-#[derive(PartialEq, Eq, Clone)]
+#[derive(PartialEq, Eq, Clone, Debug)]
enum Token {
Integer(i64),
Float(OrderedFloat<f64>),
line_number: 1,
endian,
};
- lexer.next()?;
+ lexer.token = lexer.next()?;
Ok(lexer)
}
fn take(&mut self) -> Result<Token> {
}
}
'"' => {
- let mut s = String::from(c);
+ let mut s = String::new();
loop {
match self.iter.next() {
None => return Err(anyhow!("end-of-file inside string")),
Ok(Some(token))
}
}
+
+#[cfg(test)]
+mod test {
+ use crate::endian::Endian;
+ use crate::sack::sack;
+ use anyhow::Result;
+ use hexplay::HexView;
+
+ #[test]
+ fn basic_sack() -> Result<()> {
+ let input = r#"
+"$FL2"; s60 "$(#) SPSS DATA FILE PSPP synthetic test file";
+2; # Layout code
+28; # Nominal case size
+0; # Not compressed
+0; # Not weighted
+1; # 1 case.
+100.0; # Bias.
+"01 Jan 11"; "20:53:52";
+"PSPP synthetic test file: "; i8 244; i8 245; i8 246; i8 248; s34 "";
+i8 0 *3;
+"#;
+ let output = sack(input, Endian::Big)?;
+ HexView::new(&output).print()?;
+ Ok(())
+ }
+}