pub mod annotation;
pub mod ast;
pub mod comment;
pub mod error;
pub mod lexer;
pub mod macros;
pub mod package;
pub mod parser;
pub use ast::*;
pub use error::{Location, ParseError};
pub use package::{OntologyFile as LoadedOntologyFile, Package, PackageError};
pub use parser::{
parse_ontology, parse_ontology_file, parse_ontology_with_comments, parse_package,
};
#[cfg(feature = "python")]
use pyo3::prelude::*;
use crate::{
error::{DolfinParseError, ParseResult},
parser::parse_result_strict,
};
#[cfg(feature = "python")]
#[pyfunction]
#[pyo3(name = "parse")]
fn py_parse(source: &str) -> PyResult<OntologyFile> {
parse_result_strict(parse_ontology(source)).map_err(|e| (*e).into())
}
#[cfg(feature = "python")]
#[pyfunction]
#[pyo3(name = "parse_file")]
fn py_parse_file(path: &str) -> PyResult<OntologyFile> {
parse_result_strict(parse_ontology_file(path)).map_err(|e| (*e).into())
}
#[cfg(feature = "python")]
#[pyfunction]
#[pyo3(name = "tokenize")]
fn py_tokenize(source: &str) -> PyResult<Vec<String>> {
let lexer = lexer::Lexer::new(source);
let mut tokens = Vec::new();
for result in lexer {
match result {
Ok((_, tok, _)) => tokens.push(format!("{}", tok)),
Err(e) => return Err(pyo3::exceptions::PyValueError::new_err(e.message)),
}
}
Ok(tokens)
}
#[cfg(feature = "python")]
#[pyfunction]
#[pyo3(name = "version")]
fn py_version() -> &'static str {
env!("CARGO_PKG_VERSION")
}
#[cfg(feature = "python")]
#[pymodule]
fn rowl(m: &Bound<'_, PyModule>) -> PyResult<()> {
m.add_function(wrap_pyfunction!(py_parse, m)?)?;
m.add_function(wrap_pyfunction!(py_parse_file, m)?)?;
m.add_function(wrap_pyfunction!(py_tokenize, m)?)?;
m.add_function(wrap_pyfunction!(py_version, m)?)?;
m.add_class::<OntologyFile>()?;
m.add_class::<QualifiedName>()?;
m.add_class::<PrefixDecl>()?;
m.add_class::<Declaration>()?;
m.add_class::<ConceptDef>()?;
m.add_class::<ConceptMember>()?;
m.add_class::<HasDeclaration>()?;
m.add_class::<PropertyDef>()?;
m.add_class::<RuleDef>()?;
m.add_class::<MatchBlock>()?;
m.add_class::<ThenBlock>()?;
m.add_class::<ThenItem>()?;
m.add_class::<Pattern>()?;
m.add_class::<Subject>()?;
m.add_class::<Object>()?;
m.add_class::<Assertion>()?;
m.add_class::<ConstraintBlock>()?;
m.add_class::<Constraint>()?;
m.add_class::<Literal>()?;
m.add_class::<TypeRef>()?;
m.add_class::<Cardinality>()?;
m.add_class::<CardinalityValue>()?;
m.add_class::<Quantifier>()?;
m.add_class::<ComparisonOp>()?;
m.add_class::<ParseResult>()?;
m.add_class::<Location>()?;
m.add_class::<DolfinParseError>()?;
Ok(())
}