sv_parser_parser/expressions/
operators.rs1use crate::*;
2
3#[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}