basic-lang 0.1.0

The BASIC programming language as it was in 1978.
Documentation
use super::ast::*;
use super::error::*;
use super::lex::*;
use super::parse::*;
use super::token::*;

#[derive(Debug, PartialEq)]
pub struct Line {
    number: Option<u16>,
    tokens: Vec<Token>,
}

impl Line {
    pub fn from_str(s: &str) -> Line {
        let (line_number, tokens) = lex(s);
        Line {
            tokens: tokens,
            number: line_number,
        }
    }

    pub fn ast(&mut self) -> Result<Vec<Statement>, Error> {
        parse(self.tokens.iter())
    }
}

impl std::fmt::Display for Line {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        let s: String = self.tokens.iter().map(|s| s.to_string()).collect();
        if self.number.is_some() {
            write!(f, "{} {}", self.number.unwrap(), s)
        } else {
            write!(f, "{}", s)
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_foo() {
        let _ = Line::from_str("100 fancy");
    }
}