Translated using Weblate (Japanese)
[oweals/luci.git] / modules / luci-base / src / plural_formula.y
1 %name pluralParse
2 %token_type {int}
3 %extra_argument {struct parse_state *s}
4
5 %right T_QMARK.
6 %left T_OR.
7 %left T_AND.
8 %left T_EQ T_NE.
9 %left T_LT T_LE T_GT T_GE.
10 %left T_ADD T_SUB.
11 %left T_MUL T_DIV T_MOD.
12 %right T_NOT.
13 %nonassoc T_COLON T_N T_LPAREN T_RPAREN.
14
15 %include {
16 #include <assert.h>
17
18 struct parse_state {
19         int num;
20         int res;
21 };
22 }
23
24 input ::= expr(A).                                                                              { s->res = A; }
25
26 expr(A) ::= expr(B) T_QMARK expr(C) T_COLON expr(D).    { A = B ? C : D; }
27 expr(A) ::= expr(B) T_OR expr(C).                                               { A = B || C; }
28 expr(A) ::= expr(B) T_AND expr(C).                                              { A = B && C; }
29 expr(A) ::= expr(B) T_EQ expr(C).                                               { A = B == C; }
30 expr(A) ::= expr(B) T_NE expr(C).                                               { A = B != C; }
31 expr(A) ::= expr(B) T_LT expr(C).                                               { A = B < C; }
32 expr(A) ::= expr(B) T_LE expr(C).                                               { A = B <= C; }
33 expr(A) ::= expr(B) T_GT expr(C).                                               { A = B > C; }
34 expr(A) ::= expr(B) T_GE expr(C).                                               { A = B >= C; }
35 expr(A) ::= expr(B) T_ADD expr(C).                                              { A = B + C; }
36 expr(A) ::= expr(B) T_SUB expr(C).                                              { A = B - C; }
37 expr(A) ::= expr(B) T_MUL expr(C).                                              { A = B * C; }
38 expr(A) ::= expr(B) T_DIV expr(C).                                              { A = B / C; }
39 expr(A) ::= expr(B) T_MOD expr(C).                                              { A = B % C; }
40 expr(A) ::= T_NOT expr(B).                                                              { A = !B; }
41 expr(A) ::= T_N.                                                                                { A = s->num; }
42 expr(A) ::= T_NUM(B).                                                                   { A = B; }
43 expr(A) ::= T_LPAREN expr(B) T_RPAREN.                                  { A = B; }