-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbolum9.txt
45 lines (35 loc) · 1.69 KB
/
bolum9.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
9.İfadeler
İç içe koymak veya üç nokta bazı şartlı ifadelere izin verir ve diğerlerinin belirsizliğine neden olur.Örneğin ...expr... dizininde,nonterminaller expr örneklerinde açık c dili ile ifade edilmelidir,bir dizi referansta ise ,expr 1 [ expr 2 ],nonterminal expr2 dir çünkü parantez tarafından ayrılmıştır,aynı zamanda "..."(üç nokta) örneği de olabilir,rasgele bir ifadeyi temsil eder.Çeşitli olasılıklar arasında ayrım yapmak için ifadeleri üç nonteminalleri ile tanımlarız:"expr", üst düzey iç içe koyma veya üç nokta ya izin vermez,"nest_expr" bir iç içe koymaya değil,üç nokta izin verir,ve "dot_expr" ikisine de izin verir. EXPR makro bir şekilde bu türevleri ifade etmek için kullanılır.
expr ::= EXPR(expr)
nest_expr ::= EXPR(nest_expr)
| NEST(nest_expr,exp_whencode)
dot_expr ::= EXPR(dot_expr)
| NEST(dot_expr, exp_whencode)
| ... [exp_whencode]
EXPR(exp) ::= exp assign_op exp
| exp++
| exp-
| unary_op exp
| exp bin_op exp
| exp ? dot_expr : exp
| (type) exp
| exp [dot_expr]
| exp . id
| exp -> id
| exp([PARAMSEQ(arg, exp_whencode)])
| id
| (type) { COMMA_LIST(init_list_elem) }
| metaid^Exp
| metaid^Const
| const
| (dot_expr)
| OR(exp)
arg ::= nest_expr
| metaid^ExpList
exp_whencode ::= when != expr
assign_op ::= = | -= | += | *= | /= | %=
| &= | |= | ˆ= | <<= | >>=
bin_op ::= * | / | % | + | -
| <<| >>| ˆ | & | |
| < | > | <= | >= | == | != | && | ||
unary_op ::= ++ | - | & | * | + | - | !