sv_parser_parser/udp_declaration_and_instantiation/
udp_declaration.rs1use crate::*;
2
3#[tracable_parser]
6#[packrat_parser]
7pub(crate) fn udp_nonansi_declaration(s: Span) -> IResult<Span, UdpNonansiDeclaration> {
8 let (s, (a, b)) = many_till(attribute_instance, keyword("primitive"))(s)?;
9 let (s, c) = udp_identifier(s)?;
10 let (s, d) = paren(udp_port_list)(s)?;
11 let (s, e) = symbol(";")(s)?;
12 Ok((
13 s,
14 UdpNonansiDeclaration {
15 nodes: (a, b, c, d, e),
16 },
17 ))
18}
19
20#[tracable_parser]
21#[packrat_parser]
22pub(crate) fn udp_ansi_declaration(s: Span) -> IResult<Span, UdpAnsiDeclaration> {
23 let (s, (a, b)) = many_till(attribute_instance, keyword("primitive"))(s)?;
24 let (s, c) = udp_identifier(s)?;
25 let (s, d) = paren(udp_declaration_port_list)(s)?;
26 let (s, e) = symbol(";")(s)?;
27 Ok((
28 s,
29 UdpAnsiDeclaration {
30 nodes: (a, b, c, d, e),
31 },
32 ))
33}
34
35#[tracable_parser]
36#[packrat_parser]
37pub(crate) fn udp_declaration(s: Span) -> IResult<Span, UdpDeclaration> {
38 alt((
39 udp_declaration_nonansi,
40 udp_declaration_ansi,
41 udp_declaration_extern_nonansi,
42 udp_declaration_extern_ansi,
43 udp_declaration_wildcard,
44 ))(s)
45}
46
47#[tracable_parser]
48#[packrat_parser]
49pub(crate) fn udp_declaration_nonansi(s: Span) -> IResult<Span, UdpDeclaration> {
50 let (s, a) = udp_nonansi_declaration(s)?;
51 let (s, b) = udp_port_declaration(s)?;
52 let (s, c) = many0(udp_port_declaration)(s)?;
53 let (s, d) = udp_body(s)?;
54 let (s, e) = keyword("endprimitive")(s)?;
55 let (s, f) = opt(pair(symbol(":"), udp_identifier))(s)?;
56 Ok((
57 s,
58 UdpDeclaration::Nonansi(Box::new(UdpDeclarationNonansi {
59 nodes: (a, b, c, d, e, f),
60 })),
61 ))
62}
63
64#[tracable_parser]
65#[packrat_parser]
66pub(crate) fn udp_declaration_ansi(s: Span) -> IResult<Span, UdpDeclaration> {
67 let (s, a) = udp_ansi_declaration(s)?;
68 let (s, b) = udp_body(s)?;
69 let (s, c) = keyword("endprimitive")(s)?;
70 let (s, d) = opt(pair(symbol(":"), udp_identifier))(s)?;
71 Ok((
72 s,
73 UdpDeclaration::Ansi(Box::new(UdpDeclarationAnsi {
74 nodes: (a, b, c, d),
75 })),
76 ))
77}
78
79#[tracable_parser]
80#[packrat_parser]
81pub(crate) fn udp_declaration_extern_nonansi(s: Span) -> IResult<Span, UdpDeclaration> {
82 let (s, a) = keyword("extern")(s)?;
83 let (s, b) = udp_nonansi_declaration(s)?;
84 Ok((
85 s,
86 UdpDeclaration::ExternNonansi(Box::new(UdpDeclarationExternNonansi { nodes: (a, b) })),
87 ))
88}
89
90#[tracable_parser]
91#[packrat_parser]
92pub(crate) fn udp_declaration_extern_ansi(s: Span) -> IResult<Span, UdpDeclaration> {
93 let (s, a) = keyword("extern")(s)?;
94 let (s, b) = udp_ansi_declaration(s)?;
95 Ok((
96 s,
97 UdpDeclaration::ExternAnsi(Box::new(UdpDeclarationExternAnsi { nodes: (a, b) })),
98 ))
99}
100
101#[tracable_parser]
102#[packrat_parser]
103pub(crate) fn udp_declaration_wildcard(s: Span) -> IResult<Span, UdpDeclaration> {
104 let (s, (a, b)) = many_till(attribute_instance, keyword("primitive"))(s)?;
105 let (s, c) = udp_identifier(s)?;
106 let (s, d) = paren(symbol(".*"))(s)?;
107 let (s, e) = symbol(";")(s)?;
108 let (s, f) = many0(udp_port_declaration)(s)?;
109 let (s, g) = udp_body(s)?;
110 let (s, h) = keyword("endprimitive")(s)?;
111 let (s, i) = opt(pair(symbol(":"), udp_identifier))(s)?;
112 Ok((
113 s,
114 UdpDeclaration::Wildcard(Box::new(UdpDeclarationWildcard {
115 nodes: (a, b, c, d, e, f, g, h, i),
116 })),
117 ))
118}