Separate error
This commit is contained in:
@@ -0,0 +1,18 @@
|
|||||||
|
use crate::Rule;
|
||||||
|
|
||||||
|
pub type ParseResult<'a, T> = Result<T, ParseError<'a>>;
|
||||||
|
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub enum ParseError<'a> {
|
||||||
|
PreAst(pest::error::Error<Rule>),
|
||||||
|
Ast {
|
||||||
|
span: pest::Span<'a>,
|
||||||
|
error_code: ErrorCode,
|
||||||
|
error_message: String,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub enum ErrorCode {
|
||||||
|
InvalidStatement = 200,
|
||||||
|
}
|
||||||
+3
-17
@@ -2,30 +2,16 @@ use pest::Parser;
|
|||||||
use pest_derive::Parser;
|
use pest_derive::Parser;
|
||||||
|
|
||||||
pub mod ast;
|
pub mod ast;
|
||||||
|
pub mod error;
|
||||||
|
|
||||||
use ast::*;
|
use ast::*;
|
||||||
|
|
||||||
|
use crate::error::{ErrorCode, ParseError, ParseResult};
|
||||||
|
|
||||||
#[derive(Parser)]
|
#[derive(Parser)]
|
||||||
#[grammar = "./src/grammar.pest"]
|
#[grammar = "./src/grammar.pest"]
|
||||||
pub struct MistParser;
|
pub struct MistParser;
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
|
||||||
pub enum ParseError<'a> {
|
|
||||||
PreAst(pest::error::Error<Rule>),
|
|
||||||
Ast {
|
|
||||||
span: pest::Span<'a>,
|
|
||||||
error_code: ErrorCode,
|
|
||||||
error_message: String,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
type ParseResult<'a, T> = Result<T, ParseError<'a>>;
|
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
|
||||||
pub enum ErrorCode {
|
|
||||||
InvalidStatement = 200,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn parse<'a>(source: &'a str) -> ParseResult<'a, Vec<TopLevel>> {
|
pub fn parse<'a>(source: &'a str) -> ParseResult<'a, Vec<TopLevel>> {
|
||||||
let mut pairs = MistParser::parse(Rule::program, source)?;
|
let mut pairs = MistParser::parse(Rule::program, source)?;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user