~ubuntu-branches/ubuntu/precise/rakudo/precise

« back to all changes in this revision

Viewing changes to src/parser/grammar-oper.pg

  • Committer: Bazaar Package Importer
  • Author(s): Ryan Niebur
  • Date: 2009-10-04 14:31:57 UTC
  • Revision ID: james.westby@ubuntu.com-20091004143157-ubq3wu0grk0f1e6a
Tags: upstream-0.1~2009.09
Import upstream version 0.1~2009.09

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2007, The Perl Foundation.
 
2
# $Id$
 
3
 
 
4
## autoincrement
 
5
proto postfix:<++> is precedence('x=') is lvalue(1) { ... }
 
6
proto postfix:<--> is equiv(postfix:<++>) is lvalue(1) { ... }
 
7
proto prefix:<++> is equiv(postfix:<++>) is lvalue(1) { ... }
 
8
proto prefix:<--> is equiv(postfix:<++>) is lvalue(1) { ... }
 
9
proto postfix:<i> is equiv(postfix:<++>) { ... }
 
10
 
 
11
## exponentiation
 
12
proto infix:<**> is precedence('w=') is assoc('right') { ... }
 
13
 
 
14
## symbolic unary
 
15
proto prefix:<+> is precedence('v=') { ... }
 
16
proto prefix:<-> is equiv(prefix:<+>) { ... }
 
17
proto prefix:<~> is equiv(prefix:<+>) { ... }
 
18
proto prefix:<?> is equiv(prefix:<+>) { ... }
 
19
proto prefix:<!> is equiv(prefix:<+>) { ... }
 
20
proto prefix:<+^> is equiv(prefix:<+>)
 
21
    is pirop('bnot')
 
22
    { ... }
 
23
proto prefix:<=> is equiv(prefix:<+>) { ... }
 
24
proto prefix:<^> is equiv(prefix:<+>) { ... }
 
25
proto prefix:<\> is equiv(prefix:<+>) { ... }
 
26
proto prefix:<|> is equiv(prefix:<+>) { ... }
 
27
 
 
28
## multiplicative operators
 
29
proto infix:<*> is precedence('u=') { ... }
 
30
proto infix:</> is equiv(infix:<*>) { ... }
 
31
proto infix:<%> is equiv(infix:<*>) { ... }
 
32
proto infix:<!%> is equiv(infix:<*>) { ... }
 
33
proto infix:<+&> is equiv(infix:<*>) { ... }
 
34
proto infix:<+^> is equiv(infix:<*>) { ... }
 
35
proto infix:«+<» is equiv(infix:<*>) { ... }
 
36
proto infix:«+>» is equiv(infix:<*>) { ... }
 
37
proto infix:<~&> is equiv(infix:<*>) { ... }
 
38
proto infix:«~<» is equiv(infix:<*>) { ... }
 
39
proto infix:«~>» is equiv(infix:<*>) { ... }
 
40
proto infix:<?&> is equiv(infix:<*>) { ... }
 
41
proto infix:<div> is equiv(infix:<*>) { ... }
 
42
proto infix:<mod> is equiv(infix:<*>) { ... }
 
43
 
 
44
## additive operators
 
45
proto infix:<+> is precedence('t=') { ... }
 
46
proto infix:<-> is equiv(infix:<+>) { ... }
 
47
proto infix:<+|> is equiv(infix:<+>) { ... }
 
48
proto infix:<+^> is equiv(infix:<+>) { ... }
 
49
proto infix:<~|> is equiv(infix:<+>) { ... }
 
50
proto infix:<~^> is equiv(infix:<+>) { ... }
 
51
proto infix:<?|> is equiv(infix:<+>) { ... }
 
52
proto infix:<?^> is equiv(infix:<+>) { ... }
 
53
 
 
54
## replication
 
55
proto infix:<x> is precedence('s=') { ... }
 
56
proto infix:<xx> is equiv(infix:<x>) { ... }
 
57
 
 
58
## concatenation
 
59
proto infix:<~> is precedence('r=') { ... }
 
60
 
 
61
## junctive and
 
62
proto infix:<&> is precedence('q=')
 
63
    is assoc('list')
 
64
    { ... }
 
65
 
 
66
## junctive or
 
67
proto infix:<|> is precedence('p=')
 
68
    is assoc('list')
 
69
    { ... }
 
70
proto infix:<^> is equiv(infix:<|>)
 
71
    is assoc('list')
 
72
    { ... }
 
73
 
 
74
## named unary
 
75
proto prefix:<abs> is precedence('o=') is subname('abs') { ... }
 
76
proto prefix:<HOW> is equiv(prefix:<abs>) is subname('HOW') { ... }
 
77
proto prefix:<WHAT> is equiv(prefix:<abs>) is subname('WHAT') { ... }
 
78
proto prefix:<pop> is equiv(prefix:<abs>) is subname('pop') { ... }
 
79
proto prefix:<shift> is equiv(prefix:<abs>) is subname('shift') { ... }
 
80
proto prefix:<defined> is equiv(prefix:<abs>) is subname('defined') { ... }
 
81
 
 
82
## nonchaining
 
83
proto infix:<..> is precedence('n=') { ... }
 
84
proto infix:<..^> is equiv(infix:<..>) { ... }
 
85
proto infix:<^..> is equiv(infix:<..>) { ... }
 
86
proto infix:<^..^> is equiv(infix:<..>) { ... }
 
87
proto infix:«<=>» is equiv(infix:<..>) { ... }
 
88
proto infix:<cmp> is equiv(infix:<..>) { ... }
 
89
proto infix:<leg> is equiv(infix:<..>) { ... }
 
90
proto infix:<=:=> is equiv(infix:<..>) { ... }
 
91
proto infix:<!=:=> is equiv(infix:<..>) { ... }
 
92
proto infix:<does> is equiv(infix:<..>) { ... }
 
93
proto infix:<but> is equiv(infix:<..>) { ... }
 
94
 
 
95
## chaining
 
96
proto infix:<==>  is precedence('m=') is pasttype('chain') { ... }
 
97
proto infix:<!=>  is equiv(infix:<==>) is pasttype('chain') { ... }
 
98
proto infix:<!==>  is equiv(infix:<==>) is pasttype('chain') { ... }
 
99
proto infix:«<»   is equiv(infix:<==>) is pasttype('chain') { ... }
 
100
proto infix:«<=»  is equiv(infix:<==>) is pasttype('chain') { ... }
 
101
proto infix:«>»   is equiv(infix:<==>) is pasttype('chain') { ... }
 
102
proto infix:«>=»  is equiv(infix:<==>) is pasttype('chain') { ... }
 
103
proto infix:<eq>  is equiv(infix:<==>) is pasttype('chain') { ... }
 
104
proto infix:<!eq>  is equiv(infix:<==>) is pasttype('chain') { ... }
 
105
proto infix:<ne>  is equiv(infix:<==>) is pasttype('chain') { ... }
 
106
proto infix:<lt>  is equiv(infix:<==>) is pasttype('chain') { ... }
 
107
proto infix:<le>  is equiv(infix:<==>) is pasttype('chain') { ... }
 
108
proto infix:<gt>  is equiv(infix:<==>) is pasttype('chain') { ... }
 
109
proto infix:<ge>  is equiv(infix:<==>) is pasttype('chain') { ... }
 
110
proto infix:<~~>  is equiv(infix:<==>) is pasttype('chain') { ... }
 
111
proto infix:<!~~>  is equiv(infix:<==>) is pasttype('chain') { ... }
 
112
proto infix:<===> is equiv(infix:<==>) is pasttype('chain') { ... }
 
113
proto infix:<!===> is equiv(infix:<==>) is pasttype('chain') { ... }
 
114
proto infix:<eqv> is equiv(infix:<==>) is pasttype('chain') { ... }
 
115
proto infix:<!eqv> is equiv(infix:<==>) is pasttype('chain') { ... }
 
116
 
 
117
## tight and
 
118
proto infix:<&&> is precedence('l=')
 
119
    is pasttype('if')
 
120
    { ... }
 
121
 
 
122
## tight or
 
123
proto infix:<||> is precedence('k=')
 
124
    is pasttype('unless')
 
125
    { ... }
 
126
proto infix:<^^> is equiv(infix:<||>)
 
127
    is pasttype('xor')
 
128
    { ... }
 
129
proto infix:<//> is equiv(infix:<||>)
 
130
    is pasttype('def_or')
 
131
    { ... }
 
132
proto infix:<min> is equiv(infix:<||>) 
 
133
    is assoc('list')
 
134
    { ... }
 
135
proto infix:<max> is equiv(infix:<||>)
 
136
    is assoc('list')
 
137
    { ... }
 
138
 
 
139
## conditional
 
140
proto ternary:<?? !!> is precedence('j=') is pasttype('if') is assoc('right') { ... }
 
141
 
 
142
## item assignment
 
143
proto infix:<:=> is precedence('i=') is assoc('right') is pasttype('bind') { ... }
 
144
proto infix:<::=> is equiv(infix:<:=>) { ... }
 
145
proto infix:<.=> is equiv(infix:<:=>) { ... }
 
146
proto infix:«=>» is equiv(infix:<:=>) { ... }
 
147
proto infix:<//=> is equiv(infix:<:=>) is lvalue(1) { ... }
 
148
proto infix:<&&=> is equiv(infix:<:=>) { ... }
 
149
proto infix:<||=> is equiv(infix:<:=>) { ... }
 
150
 
 
151
## loose unary
 
152
proto prefix:<true> is precedence('h=') is subname('true') { ... }
 
153
proto prefix:<not> is equiv(prefix:<true>) is subname('not') { ... }
 
154
 
 
155
## comma
 
156
proto infix:<,> is precedence('g=')
 
157
    is assoc('list')
 
158
    is nullterm
 
159
    { ... }
 
160
proto infix:«p5=>» is equiv(infix:<,>) is subname('infix:,') { ... }
 
161
 
 
162
## list infix
 
163
proto infix:<X> is precedence('f=')
 
164
    is assoc('list')
 
165
   { ... }
 
166
proto infix:<Z> is equiv(infix:<X>) { ... }
 
167
proto infix:<...> is equiv(infix:<X>) { ... }
 
168
proto infix:<minmax> is equiv(infix:<X>) { ... }
 
169
proto infix:<X,X> is equiv(infix:<X>)
 
170
    is assoc('list')
 
171
    is subname('infix:X')
 
172
    { ... }
 
173
 
 
174
## list assignment
 
175
proto infix:<=> is precedence('e=')
 
176
    is assoc('right')
 
177
    is lvalue(1)
 
178
    { ... }
 
179
proto prefix:<[,]> is precedence('e=') is subname('list') {...}
 
180
proto prefix:<[&]> is equiv(prefix:<[,]>) is subname('all') {...}
 
181
proto prefix:<[|]> is equiv(prefix:<[,]>) is subname('any') {...}
 
182
proto prefix:<[^]> is equiv(prefix:<[,]>) is subname('one') {...}
 
183
proto prefix:<[||]> is equiv(prefix:<[,]>) {...}
 
184
proto prefix:<[//]> is equiv(prefix:<[,]>) {...}
 
185
 
 
186
## loose and
 
187
proto infix:<and> is precedence('d=')
 
188
    is pasttype('if')
 
189
    { ... }
 
190
proto infix:<andthen> is equiv(infix:<and>) { ... }
 
191
 
 
192
## loose or
 
193
proto infix:<or> is precedence('c=')
 
194
    is pasttype('unless')
 
195
    { ... }
 
196
proto infix:<xor> is equiv(infix:<or>)
 
197
    is pasttype('xor')
 
198
    { ... }
 
199
proto infix:<orelse> is equiv(infix:<or>) { ... }
 
200
 
 
201
proto infix:«<==»    is precedence('b=')    { ... }
 
202
proto ifnix:«==>»    is equiv(infix:«<==»)  { ... }
 
203
proto ifnix:«<<==»   is equiv(infix:«<==»)  { ... }
 
204
proto ifnix:«==>>»   is equiv(infix:«<==»)  { ... }