1#![allow(clippy::many_single_char_names, clippy::module_inception)]
2
3pub mod keywords;
4#[macro_use]
5pub mod utils;
6pub(crate) use keywords::*;
7pub(crate) use utils::*;
8
9mod tests;
10
11pub mod behavioral_statements;
12pub mod declarations;
13pub mod expressions;
14pub mod general;
15pub mod instantiations;
16pub mod preprocessor;
17pub mod primitive_instances;
18pub mod source_text;
19pub mod specify_section;
20pub mod udp_declaration_and_instantiation;
21pub(crate) use behavioral_statements::*;
22pub(crate) use declarations::*;
23pub(crate) use expressions::*;
24pub(crate) use general::*;
25pub(crate) use instantiations::*;
26pub(crate) use preprocessor::*;
27pub(crate) use primitive_instances::*;
28pub(crate) use source_text::*;
29pub(crate) use specify_section::*;
30pub(crate) use udp_declaration_and_instantiation::*;
31
32pub(crate) use nom::branch::*;
33pub(crate) use nom::bytes::complete::*;
34pub(crate) use nom::character::complete::*;
35pub(crate) use nom::combinator::*;
36pub(crate) use nom::error::{context, make_error, ErrorKind};
37pub(crate) use nom::multi::*;
38pub(crate) use nom::sequence::*;
39pub(crate) use nom::Err;
40pub(crate) use nom_greedyerror::GreedyError;
41pub(crate) use nom_packrat::{self, packrat_parser, HasExtraState};
42pub(crate) use nom_recursive::{recursive_parser, HasRecursiveInfo, RecursiveInfo};
43pub(crate) use nom_tracable::tracable_parser;
44#[cfg(feature = "trace")]
45pub(crate) use nom_tracable::{HasTracableInfo, TracableInfo};
46pub(crate) use sv_parser_syntaxtree::*;
47
48#[derive(Clone, Copy, Debug, Default, PartialEq)]
51pub struct SpanInfo {
52 #[cfg(feature = "trace")]
53 pub tracable_info: TracableInfo,
54 pub recursive_info: RecursiveInfo,
55}
56
57pub type Span<'a> = nom_locate::LocatedSpan<&'a str, SpanInfo>;
58pub type IResult<T, U> = nom::IResult<T, U, GreedyError<T, ErrorKind>>;
59
60impl HasRecursiveInfo for SpanInfo {
61 fn get_recursive_info(&self) -> RecursiveInfo {
62 self.recursive_info
63 }
64
65 fn set_recursive_info(mut self, info: RecursiveInfo) -> Self {
66 self.recursive_info = info;
67 self
68 }
69}
70
71#[cfg(feature = "trace")]
72impl HasTracableInfo for SpanInfo {
73 fn get_tracable_info(&self) -> TracableInfo {
74 self.tracable_info
75 }
76
77 fn set_tracable_info(mut self, info: TracableInfo) -> Self {
78 self.tracable_info = info;
79 self
80 }
81}
82
83impl HasExtraState<bool> for SpanInfo {
84 fn get_extra_state(&self) -> bool {
85 in_directive()
86 }
87}
88
89nom_packrat::storage!(AnyNode, bool, 1024);
92
93pub fn sv_parser(s: Span) -> IResult<Span, SourceText> {
94 init();
95 source_text(s)
96}
97
98pub fn sv_parser_incomplete(s: Span) -> IResult<Span, SourceText> {
99 init();
100 source_text_incomplete(s)
101}
102
103pub fn lib_parser(s: Span) -> IResult<Span, LibraryText> {
104 init();
105 library_text(s)
106}
107
108pub fn lib_parser_incomplete(s: Span) -> IResult<Span, LibraryText> {
109 init();
110 library_text_incomplete(s)
111}
112
113pub fn pp_parser(s: Span) -> IResult<Span, PreprocessorText> {
114 init();
115 preprocessor_text(s)
116}
117
118fn init() {
119 nom_packrat::init!();
120 clear_directive();
121 clear_version();
122}