1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
//! Parser combinator for EXPRESS language
//!
//! This submodule responsible for tokenize of EXPRESS language input into a [SyntaxTree] struct,
//! and provides parser combinators based on [nom](https://github.com/Geal/nom).
//!
//! Most parsers correspond to EXPRESS language grammers defined in [ISO-10303-11].
//! Each documentation of the parsers contains wirth syntax notation (WSN).
//! For example,
//!
//! ```text
//! 124 digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 .
//! ```
//!
//! [digit] matches to a digit character.
//! The head number, `124`, is the serial number of this WSN in [ISO-10303-11].
//!
//! [ISO-10303-11]: https://www.iso.org/standard/38047.html
//!
//! Remarks
//! --------
//!
//! EXPRESS language has two forms of "remarks" which corresponds to "comments" in Rust
//!
//! ```text
//! (* this is called "embedded remark" *)
//! -- this is called "tail remark"
//! ```
//!
//! Each of remarks are handled by [embedded_remark] and [tail_remark].
//! For handling remarks appear in arbitrary position,
//! we re-define nom's combinators in [combinator] to stack remarks onto a `Vec<Remark>` in appeared order.
//!
#[cfg(doc)]
use crate::ast::*;
pub mod combinator;
mod basis;
mod entity;
mod expression;
mod identifier;
mod literal;
mod remark;
mod reserved;
mod schema;
mod stmt;
mod subsuper;
mod types;
pub use basis::*;
pub use entity::*;
pub use expression::*;
pub use identifier::*;
pub use literal::*;
pub use remark::*;
pub use reserved::*;
pub use schema::*;
pub use stmt::*;
pub use subsuper::*;
pub use types::*;