sv_parser_parser/source_text/
package_items.rs1use crate::*;
2
3#[tracable_parser]
6#[packrat_parser]
7pub(crate) fn package_item(s: Span) -> IResult<Span, PackageItem> {
8 alt((
9 map(package_or_generate_item_declaration, |x| {
10 PackageItem::PackageOrGenerateItemDeclaration(Box::new(x))
11 }),
12 map(anonymous_program, |x| {
13 PackageItem::AnonymousProgram(Box::new(x))
14 }),
15 map(package_export_declaration, |x| {
16 PackageItem::PackageExportDeclaration(Box::new(x))
17 }),
18 map(timeunits_declaration, |x| {
19 PackageItem::TimeunitsDeclaration(Box::new(x))
20 }),
21 ))(s)
22}
23
24#[tracable_parser]
25#[packrat_parser]
26pub(crate) fn package_or_generate_item_declaration(
27 s: Span,
28) -> IResult<Span, PackageOrGenerateItemDeclaration> {
29 alt((
30 map(net_declaration, |x| {
31 PackageOrGenerateItemDeclaration::NetDeclaration(Box::new(x))
32 }),
33 map(data_declaration, |x| {
34 PackageOrGenerateItemDeclaration::DataDeclaration(Box::new(x))
35 }),
36 map(task_declaration, |x| {
37 PackageOrGenerateItemDeclaration::TaskDeclaration(Box::new(x))
38 }),
39 map(function_declaration, |x| {
40 PackageOrGenerateItemDeclaration::FunctionDeclaration(Box::new(x))
41 }),
42 map(checker_declaration, |x| {
43 PackageOrGenerateItemDeclaration::CheckerDeclaration(Box::new(x))
44 }),
45 map(dpi_import_export, |x| {
46 PackageOrGenerateItemDeclaration::DpiImportExport(Box::new(x))
47 }),
48 map(extern_constraint_declaration, |x| {
49 PackageOrGenerateItemDeclaration::ExternConstraintDeclaration(Box::new(x))
50 }),
51 map(class_declaration, |x| {
52 PackageOrGenerateItemDeclaration::ClassDeclaration(Box::new(x))
53 }),
54 map(interface_class_declaration, |x| {
55 PackageOrGenerateItemDeclaration::InterfaceClassDeclaration(Box::new(x))
56 }),
57 map(class_constructor_declaration, |x| {
58 PackageOrGenerateItemDeclaration::ClassConstructorDeclaration(Box::new(x))
59 }),
60 map(pair(local_parameter_declaration, symbol(";")), |x| {
61 PackageOrGenerateItemDeclaration::LocalParameterDeclaration(Box::new(x))
62 }),
63 map(pair(parameter_declaration, symbol(";")), |x| {
64 PackageOrGenerateItemDeclaration::ParameterDeclaration(Box::new(x))
65 }),
66 map(covergroup_declaration, |x| {
67 PackageOrGenerateItemDeclaration::CovergroupDeclaration(Box::new(x))
68 }),
69 map(assertion_item_declaration, |x| {
70 PackageOrGenerateItemDeclaration::AssertionItemDeclaration(Box::new(x))
71 }),
72 map(symbol(";"), |x| {
73 PackageOrGenerateItemDeclaration::Empty(Box::new(x))
74 }),
75 ))(s)
76}
77
78#[tracable_parser]
79#[packrat_parser]
80pub(crate) fn anonymous_program(s: Span) -> IResult<Span, AnonymousProgram> {
81 let (s, a) = keyword("program")(s)?;
82 let (s, b) = symbol(";")(s)?;
83 let (s, (c, d)) = many_till(anonymous_program_item, keyword("endprogram"))(s)?;
84 Ok((
85 s,
86 AnonymousProgram {
87 nodes: (a, b, c, d),
88 },
89 ))
90}
91
92#[tracable_parser]
93#[packrat_parser]
94pub(crate) fn anonymous_program_item(s: Span) -> IResult<Span, AnonymousProgramItem> {
95 alt((
96 map(task_declaration, |x| {
97 AnonymousProgramItem::TaskDeclaration(Box::new(x))
98 }),
99 map(function_declaration, |x| {
100 AnonymousProgramItem::FunctionDeclaration(Box::new(x))
101 }),
102 map(class_declaration, |x| {
103 AnonymousProgramItem::ClassDeclaration(Box::new(x))
104 }),
105 map(interface_class_declaration, |x| {
106 AnonymousProgramItem::InterfaceClassDeclaration(Box::new(x))
107 }),
108 map(covergroup_declaration, |x| {
109 AnonymousProgramItem::CovergroupDeclaration(Box::new(x))
110 }),
111 map(class_constructor_declaration, |x| {
112 AnonymousProgramItem::ClassConstructorDeclaration(Box::new(x))
113 }),
114 map(symbol(";"), |x| AnonymousProgramItem::Empty(Box::new(x))),
115 ))(s)
116}