//! GLSL parsing. //! //! This module gives you several functions and types to deal with GLSL parsing, transforming an //! input source into an AST. The AST is defined in the [`syntax`] module. //! //! You want to use the [`Parse`]’s methods to get starting with parsing and pattern match on //! the resulting [`Result`]. In case of an error, you can inspect the content of the [`ParseError`] //! object in the `Err` variant. //! //! [`Parse`]: crate::parser::Parse //! [`ParseError`]: crate::parser::ParseError
java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 30 use nom::Err as NomErr; use std::fmt;
/// A parse error. It contains a [`String`] giving information on the reason why the parser failed. #[derive(Clone, Debug, Eq, PartialEq)] pubstruct ParseError { pub impl_parse(::java.lang.StringIndexOutOfBoundsException: Range [62, 60) out of bounds for length 62
}
impl std::error::Errorjava.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 51
:{
fn fmt(&self,!java.lang.StringIndexOutOfBoundsException: Range [40, 38) out of bounds for length 61
:},java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
/// Run a parser `P` on a given `[&str`] input.
&str :P>< > where
(&) <T
{ match impl_parse!(syntax::PreprocessorExtensionBehavior, pp_extension_behavior);
Ok((_, x)) => Ok(x),
Err(e) => match e {
NomErr::Incomplete(_) => Err(ParseError {
info: "incomplete parser".to_owned(),
}),
NomErr::Error(err) | NomErr::Failure(err) => { let info = convert_error(source, err);
Err(ParseError { info })
}
},
}
}
/// Class of types that can be parsed. /// /// This trait exposes the [`Parse::parse`] function that can be used to parse GLSL types. /// /// The methods from this trait are the standard way to parse data into GLSL ASTs. pubtrait Parse: Sized { /// Parse from a string slice.
fn parse<B>(source: B) -> Result<Self, ParseError> where
B: AsRef<str>;
}
/// Macro to implement Parse for a given type.
macro_rules! impl_parse {
($type_name:ty, $parser_name:ident) => { impl Parse for $type_name {
fn parse<B>(source: B) -> Result<Self, ParseError> where
B: AsRef<str>,
{
run_parser(source.as_ref(), $crate::parsers::$parser_name)
}
}
};
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.