Skip to content

Commit bf8b32b

Browse files
author
Jason Evans
committed
Add infix expressions
1 parent ac92326 commit bf8b32b

File tree

1 file changed

+17
-14
lines changed

1 file changed

+17
-14
lines changed

bootstrap/src/hmc/Grammar.hmh

+17-14
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ include hocc
248248
neutral pArgument_Expr < pExpr_Constant
249249
neutral pArgument_Cident
250250
neutral pExpr_PrefixOp_Expr
251+
neutral pPrefixOp_Sign
251252

252253
neutral pLgroup < pExpr_Expr_Arguments, pArgument_Expr, pArgument_Cident, pExpr_PrefixOp_Expr
253254
left pLazy < pLgroup
@@ -258,10 +259,11 @@ include hocc
258259
right pColonOp < pPlusOp
259260
right pAtOp < pColonOp
260261
left pEqOp < pAtOp
261-
left pConstant < pEqOp
262262
right pAnd < pEqOp
263263
right pOr < pAnd
264-
left pComma < pConstant, pColonOp, pExpr_Constr_Expr
264+
neutral pInfixOp < pOr, pPrefixOp_Sign
265+
left pConstant < pInfixOp
266+
left pComma < pOr, pConstant, pColonOp, pExpr_Constr_Expr
265267
right pColonEq < pComma
266268
neutral pIf < pColonEq
267269
right pSemi < pIf
@@ -325,6 +327,7 @@ include hocc
325327
# Punctuation.
326328
token TILDE "~" of token_simple prec pTilde
327329
token QMARK "?" of token_simple prec pTilde
330+
token PLUS "+" of token_simple prec pPlusOp
328331
token MINUS "-" of token_simple prec pPlusOp
329332
token LT "<" of token_simple prec pEqOp
330333
token LT_EQ "<=" of token_simple prec pEqOp
@@ -352,7 +355,7 @@ include hocc
352355
token RARRAY "|]" of token_simple
353356
token BSLASH "\\" of token_simple
354357
token TICK "'" of token_simple
355-
token CARET "^" of token_simple
358+
token CARET "^" of token_simple prec pAtOp
356359
token AMP "&" of token_simple
357360
token AMP_AMP "&&" of token_simple
358361
token XMARK "!" of token_simple prec pTilde
@@ -442,15 +445,17 @@ include hocc
442445
| "type" Rec CIDENT TypeParams ":" CIDENT TypeArgs "=" "{" (* XXX *) "}"
443446
-> CModuleDef
444447

445-
nonterm PrefixOp of xxx prec pTilde ::=
446-
| TILDE_OP
447-
| QMARK_OP
448-
| "~"
449-
| "?"
450-
| "!"
448+
nonterm PrefixOp of xxx ::=
449+
| TILDE_OP prec pTilde
450+
| QMARK_OP prec pTilde
451+
| "~" prec pTilde
452+
| "?" prec pTilde
453+
| "+" prec pPrefixOp_Sign
454+
| "-" prec pPrefixOp_Sign
455+
| "!" prec pTilde
451456
-> Xxx
452457

453-
nonterm InfixOp of xxx ::=
458+
nonterm InfixOp of xxx prec pInfixOp ::=
454459
| "and"
455460
| "or"
456461
| STAR_STAR_OP
@@ -468,7 +473,7 @@ include hocc
468473
| BAR_OP
469474
| COLON_OP
470475
| DOT_OP
471-
| "~"
476+
| "+"
472477
| "-"
473478
| "<"
474479
| "<="
@@ -477,8 +482,6 @@ include hocc
477482
| ">"
478483
| ":="
479484
| "^"
480-
| "&"
481-
| "&&"
482485
-> Xxx
483486

484487
nonterm OperatorName of xxx ::=
@@ -579,7 +582,7 @@ include hocc
579582
| "{" Expr "with" Field FieldListTl "}"
580583
| Expr Arguments prec pExpr_Expr_Arguments
581584
| PrefixOp Expr prec pExpr_PrefixOp_Expr
582-
| "-" Expr prec pTilde
585+
| Expr InfixOp Expr prec pInfixOp
583586
-> Xxx
584587

585588
nonterm Exprs of xxx prec pComma ::=

0 commit comments

Comments
 (0)