summaryrefslogtreecommitdiffstats
path: root/vendor/pest/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/pest/src/lib.rs')
-rw-r--r--vendor/pest/src/lib.rs103
1 files changed, 103 insertions, 0 deletions
diff --git a/vendor/pest/src/lib.rs b/vendor/pest/src/lib.rs
new file mode 100644
index 000000000..c55518c25
--- /dev/null
+++ b/vendor/pest/src/lib.rs
@@ -0,0 +1,103 @@
+// pest. The Elegant Parser
+// Copyright (c) 2018 DragoČ™ Tiselice
+//
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT
+// license <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. All files in the project carrying such notice may not be copied,
+// modified, or distributed except according to those terms.
+
+//! # pest. The Elegant Parser
+//!
+//! pest is a general purpose parser written in Rust with a focus on accessibility, correctness,
+//! and performance. It uses parsing expression grammars (or [PEG]) as input, which are similar in
+//! spirit to regular expressions, but which offer the enhanced expressivity needed to parse
+//! complex languages.
+//!
+//! [PEG]: https://en.wikipedia.org/wiki/Parsing_expression_grammar
+//!
+//! ## Getting started
+//!
+//! The recommended way to start parsing with pest is to read the official [book].
+//!
+//! Other helpful resources:
+//!
+//! * API reference on [docs.rs]
+//! * play with grammars and share them on our [fiddle]
+//! * leave feedback, ask questions, or greet us on [Gitter]
+//!
+//! [book]: https://pest-parser.github.io/book
+//! [docs.rs]: https://docs.rs/pest
+//! [fiddle]: https://pest-parser.github.io/#editor
+//! [Gitter]: https://gitter.im/dragostis/pest
+//!
+//! ## Usage
+//!
+//! The core of pest is the trait [`Parser`], which provides an interface to the parsing
+//! functionality.
+//!
+//! The accompanying crate `pest_derive` can automatically generate a [`Parser`] from a PEG
+//! grammar. Using `pest_derive` is highly encouraged, but it is also possible to implement
+//! [`Parser`] manually if required.
+//!
+//! ## `.pest` files
+//!
+//! Grammar definitions reside in custom `.pest` files located in the crate `src` directory.
+//! Parsers are automatically generated from these files using `#[derive(Parser)]` and a special
+//! `#[grammar = "..."]` attribute on a dummy struct.
+//!
+//! ```ignore
+//! #[derive(Parser)]
+//! #[grammar = "path/to/my_grammar.pest"] // relative to src
+//! struct MyParser;
+//! ```
+//!
+//! The syntax of `.pest` files is documented in the [`pest_derive` crate].
+//!
+//! ## Inline grammars
+//!
+//! Grammars can also be inlined by using the `#[grammar_inline = "..."]` attribute.
+//!
+//! [`Parser`]: trait.Parser.html
+//! [`pest_derive` crate]: https://docs.rs/pest_derive/
+
+#![doc(html_root_url = "https://docs.rs/pest")]
+
+extern crate ucd_trie;
+
+#[cfg(feature = "pretty-print")]
+extern crate serde;
+#[cfg(feature = "pretty-print")]
+extern crate serde_json;
+
+pub use parser::Parser;
+pub use parser_state::{state, Atomicity, Lookahead, MatchDir, ParseResult, ParserState};
+pub use position::Position;
+pub use span::{Lines, Span};
+use std::fmt::Debug;
+use std::hash::Hash;
+pub use token::Token;
+
+pub mod error;
+pub mod iterators;
+mod macros;
+mod parser;
+mod parser_state;
+mod position;
+pub mod prec_climber;
+mod span;
+mod stack;
+mod token;
+#[doc(hidden)]
+pub mod unicode;
+
+/// A trait which parser rules must implement.
+///
+/// This trait is set up so that any struct that implements all of its required traits will
+/// automatically implement this trait as well.
+///
+/// This is essentially a [trait alias](https://github.com/rust-lang/rfcs/pull/1733). When trait
+/// aliases are implemented, this may be replaced by one.
+pub trait RuleType: Copy + Debug + Eq + Hash + Ord {}
+
+impl<T: Copy + Debug + Eq + Hash + Ord> RuleType for T {}