alpha-shell 0.3.0

A transpiler for the AlphaShell language
use super::{
  error::{Error, ParserResult},
  parse_helper::ParseHelper,
};
use crate::{check_token, parse::node::Node, types::TT};

pub fn parse(ph: &mut ParseHelper) -> ParserResult<Node> {
  check_token!(ph, TT::External);

  ph.advance();

  match ph.peek(0) {
    Some(TT::String(string)) => ph.variables.insert(string.clone()),
    Some(_) => return Err(Error::unexpected(ph)),
    None => return Err(Error::end(ph)),
  };

  ph.advance();

  loop {
    match ph.peek(0) {
      Some(TT::Comma) => ph.advance(),
      Some(TT::Semicolon) => break,
      Some(_) => return Err(Error::unexpected(ph)),
      None => return Err(Error::end(ph)),
    };

    ph.advance();

    match ph.peek(0) {
      Some(TT::String(string)) => ph.variables.insert(string.clone()),
      Some(_) => return Err(Error::unexpected(ph)),
      None => return Err(Error::end(ph)),
    };
  }

  ph.advance();

  Ok(Node::Empty)
}