sv_parser_parser/expressions/
operators.rs

1use crate::*;
2
3// -----------------------------------------------------------------------------
4
5#[tracable_parser]
6#[packrat_parser]
7pub(crate) fn unary_operator(s: Span) -> IResult<Span, UnaryOperator> {
8    let (s, a) = alt((
9        symbol("+"),
10        symbol("-"),
11        symbol("!"),
12        symbol("&"),
13        symbol("|"),
14        symbol("~&"),
15        symbol("~|"),
16        symbol("~^"),
17        symbol("^~"),
18        symbol("^"),
19        symbol("~"),
20    ))(s)?;
21    Ok((s, UnaryOperator { nodes: (a,) }))
22}
23
24#[tracable_parser]
25#[packrat_parser]
26pub(crate) fn binary_operator(s: Span) -> IResult<Span, BinaryOperator> {
27    let (s, a) = alt((
28        alt((
29            symbol("+"),
30            symbol("->"),
31            symbol("-"),
32            symbol("**"),
33            symbol("*"),
34            symbol("/"),
35            symbol("%"),
36            symbol("==="),
37            symbol("==?"),
38            symbol("=="),
39            symbol("!=="),
40            symbol("!=?"),
41            symbol("!="),
42            symbol("&&"),
43            symbol("||"),
44        )),
45        alt((
46            symbol("&"),
47            symbol("|"),
48            symbol("^~"),
49            symbol("^"),
50            symbol("~^"),
51            symbol(">>>"),
52            symbol(">>"),
53            symbol("<<<"),
54            symbol("<<"),
55            symbol("<->"),
56            symbol("<="),
57            symbol("<"),
58            symbol(">="),
59            symbol(">"),
60        )),
61    ))(s)?;
62    Ok((s, BinaryOperator { nodes: (a,) }))
63}
64
65#[tracable_parser]
66#[packrat_parser]
67pub(crate) fn inc_or_dec_operator(s: Span) -> IResult<Span, IncOrDecOperator> {
68    let (s, a) = alt((symbol("++"), symbol("--")))(s)?;
69    Ok((s, IncOrDecOperator { nodes: (a,) }))
70}
71
72#[tracable_parser]
73#[packrat_parser]
74pub(crate) fn unary_module_path_operator(s: Span) -> IResult<Span, UnaryModulePathOperator> {
75    let (s, a) = alt((
76        symbol("!"),
77        symbol("&"),
78        symbol("|"),
79        symbol("~&"),
80        symbol("~|"),
81        symbol("~^"),
82        symbol("^~"),
83        symbol("^"),
84        symbol("~"),
85    ))(s)?;
86    Ok((s, UnaryModulePathOperator { nodes: (a,) }))
87}
88
89#[tracable_parser]
90#[packrat_parser]
91pub(crate) fn binary_module_path_operator(s: Span) -> IResult<Span, BinaryModulePathOperator> {
92    let (s, a) = alt((
93        symbol("=="),
94        symbol("!="),
95        symbol("&&"),
96        symbol("||"),
97        symbol("&"),
98        symbol("|"),
99        symbol("^~"),
100        symbol("^"),
101        symbol("~^"),
102    ))(s)?;
103    Ok((s, BinaryModulePathOperator { nodes: (a,) }))
104}