improve ParseResult usage
This commit is contained in:
parent
3c55dc8d45
commit
8e0e1dcca5
|
@ -5,7 +5,7 @@ pub mod bp;
|
|||
pub mod de;
|
||||
pub mod error;
|
||||
|
||||
type ParseResult = Result<Node, ParseError>;
|
||||
type ParseResult<T> = Result<T, ParseError>;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum ParseError {
|
||||
|
@ -163,11 +163,11 @@ impl<'a> Parser<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
fn peek(&self) -> Result<&Symbol, ParseError> {
|
||||
fn peek(&self) -> ParseResult<&Symbol> {
|
||||
self.read().ok_or(ParseError::Eof)
|
||||
}
|
||||
|
||||
fn expect(&self, sym: Symbol, err: ParseError) -> Result<(), ParseError> {
|
||||
fn expect(&self, sym: Symbol, err: ParseError) -> ParseResult<()> {
|
||||
if *self.peek()? != sym {
|
||||
Err(err)
|
||||
} else {
|
||||
|
@ -179,7 +179,7 @@ impl<'a> Parser<'a> {
|
|||
self.pos += 1;
|
||||
}
|
||||
|
||||
fn parse_term(&mut self) -> Result<Node, ParseError> {
|
||||
fn parse_term(&mut self) -> ParseResult<Node> {
|
||||
match self.peek()? {
|
||||
Symbol::Int(n) => Ok(Node::new_op(NodeOp::Const(*n, false))),
|
||||
Symbol::SInt(n) => Ok(Node::new_op(NodeOp::Const(*n, true))),
|
||||
|
@ -212,7 +212,7 @@ impl<'a> Parser<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
fn parse_expr(&mut self) -> ParseResult {
|
||||
fn parse_expr(&mut self) -> ParseResult<Node> {
|
||||
let mut lhs = self.parse_term()?;
|
||||
|
||||
if lhs.op == NodeOp::Data || lhs.op == NodeOp::List {
|
||||
|
@ -248,7 +248,7 @@ impl<'a> Parser<'a> {
|
|||
Err(ParseError::Eof)
|
||||
}
|
||||
|
||||
pub fn parse(&mut self) -> Result<Vec<Node>, ParseError> {
|
||||
pub fn parse(&mut self) -> ParseResult<Vec<Node>> {
|
||||
let mut node_tree = vec![];
|
||||
|
||||
loop {
|
||||
|
|
Loading…
Reference in New Issue