279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
|
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
|
-
-
-
-
-
-
-
-
+
+
+
+
+
+
|
* for us. In the end though, a close paren is
* not really a binary operator, and some
* special coding in ParseExpr() make sure we
* never put an actual CLOSE_PAREN node in the
* parse tree. The sub-expression between
* parens becomes the single argument of the
* matching OPEN_PAREN unary operator. */
#define SEPARATOR ( BINARY | 29)
#define ASSIGN ( BINARY | 30)
/* ASSIGN, like EXPON, is right
* associative, and this distinction
* is coded directly in ParseExpr() */
#define END (BINARY | 31)
#define END (BINARY | 28)
/* This lexeme represents the end of the
* string being parsed. Treating it as a
* binary operator follows the same logic as
* the CLOSE_PAREN lexeme and END pairs with
* START, in the same way that CLOSE_PAREN
* pairs with OPEN_PAREN. */
#define SEPARATOR ( BINARY | 29)
#define ASSIGN ( BINARY | 30)
/* ASSIGN, like EXPON, is right associative,
* and this distinction is coded directly in
* ParseExpr() */
/*
* When ParseExpr() builds the parse tree it must choose which operands to
* connect to which operators. This is done according to operator precedence.
* The greater an operator's precedence the greater claim it has to link to an
* available operand. The Precedence enumeration lists the precedence values
* used by Tcl expression operators, from lowest to highest claim. Each
|