Skip to content

Commit db8b2a1

Browse files
authored
Merge pull request #630 from diffblue/move-expression-grammar
SystemVerilog: move expression grammar rules to Sec A.8.3
2 parents a4526fc + 6e0070c commit db8b2a1

File tree

1 file changed

+91
-91
lines changed

1 file changed

+91
-91
lines changed

src/verilog/parser.y

Lines changed: 91 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -3451,6 +3451,97 @@ constant_range:
34513451
{ init($$, ID_verilog_non_indexed_part_select); mto($$, $1); mto($$, $3); }
34523452
;
34533453

3454+
const_expression: expression;
3455+
3456+
mintypmax_expression:
3457+
expression
3458+
| expression TOK_COLON expression TOK_COLON expression
3459+
{ init($$, "mintypmax"); mto($$, $1); mto($$, $3); mto($$, $5); }
3460+
;
3461+
3462+
expression_opt:
3463+
/* Optional */
3464+
{ make_nil($$); }
3465+
| expression
3466+
;
3467+
3468+
expression_brace:
3469+
expression
3470+
{ init($$); mto($$, $1); }
3471+
| expression_brace ',' expression
3472+
{ $$=$1; mto($$, $3); }
3473+
;
3474+
3475+
expression:
3476+
primary
3477+
| unary_operator attribute_instance_brace primary
3478+
{ $$=$1; mto($$, $3); }
3479+
| inc_or_dec_expression
3480+
| expression "->" expression
3481+
{ init($$, ID_implies); mto($$, $1); mto($$, $3); }
3482+
| expression "<->" expression
3483+
{ init($$, ID_iff); mto($$, $1); mto($$, $3); }
3484+
| expression TOK_PLUS expression
3485+
{ init($$, ID_plus); mto($$, $1); mto($$, $3); }
3486+
| expression TOK_MINUS expression
3487+
{ init($$, ID_minus); mto($$, $1); mto($$, $3); }
3488+
| TOK_PLUS expression %prec UNARY_PLUS
3489+
{ init($$, ID_unary_plus); mto($$, $2); }
3490+
| TOK_MINUS expression %prec UNARY_MINUS
3491+
{ init($$, ID_unary_minus); mto($$, $2); }
3492+
| expression TOK_ASTERIC expression
3493+
{ init($$, ID_mult); mto($$, $1); mto($$, $3); }
3494+
| expression TOK_SLASH expression
3495+
{ init($$, ID_div); mto($$, $1); mto($$, $3); }
3496+
| expression TOK_PERCENT expression
3497+
{ init($$, ID_mod); mto($$, $1); mto($$, $3); }
3498+
| expression TOK_EQUALEQUAL expression
3499+
{ init($$, ID_verilog_logical_equality); mto($$, $1); mto($$, $3); }
3500+
| expression TOK_EXCLAMEQUAL expression
3501+
{ init($$, ID_verilog_logical_inequality); mto($$, $1); mto($$, $3); }
3502+
| expression TOK_EQUALEQUALEQUAL expression
3503+
{ init($$, ID_verilog_case_equality); mto($$, $1); mto($$, $3); }
3504+
| expression TOK_EXCLAMEQUALEQUAL expression
3505+
{ init($$, ID_verilog_case_inequality); mto($$, $1); mto($$, $3); }
3506+
| expression TOK_AMPERAMPER expression
3507+
{ init($$, ID_and); mto($$, $1); mto($$, $3); }
3508+
| expression TOK_ASTERICASTERIC expression
3509+
{ init($$, ID_power); mto($$, $1); mto($$, $3); }
3510+
| expression TOK_VERTBARVERTBAR expression
3511+
{ init($$, ID_or); mto($$, $1); mto($$, $3); }
3512+
| expression TOK_LESS expression
3513+
{ init($$, ID_lt); mto($$, $1); mto($$, $3); }
3514+
| expression TOK_LESSEQUAL expression
3515+
{ init($$, ID_le); mto($$, $1); mto($$, $3); }
3516+
| expression TOK_GREATER expression
3517+
{ init($$, ID_gt); mto($$, $1); mto($$, $3); }
3518+
| expression TOK_GREATEREQUAL expression
3519+
{ init($$, ID_ge); mto($$, $1); mto($$, $3); }
3520+
| expression TOK_AMPER expression
3521+
{ init($$, ID_bitand); mto($$, $1); mto($$, $3); }
3522+
| expression TOK_VERTBAR expression
3523+
{ init($$, ID_bitor); mto($$, $1); mto($$, $3); }
3524+
| expression TOK_CARET expression
3525+
{ init($$, ID_bitxor); mto($$, $1); mto($$, $3); }
3526+
| expression TOK_TILDECARET expression
3527+
{ init($$, ID_bitxnor); mto($$, $1); mto($$, $3); }
3528+
| expression TOK_LESSLESS expression
3529+
{ init($$, ID_shl); mto($$, $1); mto($$, $3); }
3530+
| expression TOK_LESSLESSLESS expression
3531+
{ init($$, ID_shl); mto($$, $1); mto($$, $3); }
3532+
| expression TOK_GREATERGREATER expression
3533+
{ init($$, ID_lshr); mto($$, $1); mto($$, $3); }
3534+
| expression TOK_GREATERGREATERGREATER expression
3535+
// This is an arithmetic right shift for signed expressions,
3536+
// and a logical right shift otherwise -- the type checker
3537+
// will determine.
3538+
{ init($$, ID_shr); mto($$, $1); mto($$, $3); }
3539+
| expression TOK_QUESTION expression TOK_COLON expression
3540+
{ init($$, ID_if); mto($$, $1); mto($$, $3); mto($$, $5); }
3541+
| TOK_QSTRING
3542+
{ init($$, ID_constant); stack_expr($$).type()=typet(ID_string); addswap($$, ID_value, $1); }
3543+
;
3544+
34543545
indexed_range:
34553546
expression TOK_PLUSCOLON constant_expression
34563547
{ init($$, ID_verilog_indexed_part_select_plus); mto($$, $1); mto($$, $3); }
@@ -3552,97 +3643,6 @@ variable_concatenation_lvalue_brace:
35523643
{ $$=$1; mto($$, $3); }
35533644
;
35543645
3555-
const_expression: expression;
3556-
3557-
mintypmax_expression:
3558-
expression
3559-
| expression TOK_COLON expression TOK_COLON expression
3560-
{ init($$, "mintypmax"); mto($$, $1); mto($$, $3); mto($$, $5); }
3561-
;
3562-
3563-
expression_opt:
3564-
/* Optional */
3565-
{ make_nil($$); }
3566-
| expression
3567-
;
3568-
3569-
expression_brace:
3570-
expression
3571-
{ init($$); mto($$, $1); }
3572-
| expression_brace ',' expression
3573-
{ $$=$1; mto($$, $3); }
3574-
;
3575-
3576-
expression:
3577-
primary
3578-
| unary_operator attribute_instance_brace primary
3579-
{ $$=$1; mto($$, $3); }
3580-
| inc_or_dec_expression
3581-
| expression "->" expression
3582-
{ init($$, ID_implies); mto($$, $1); mto($$, $3); }
3583-
| expression "<->" expression
3584-
{ init($$, ID_iff); mto($$, $1); mto($$, $3); }
3585-
| expression TOK_PLUS expression
3586-
{ init($$, ID_plus); mto($$, $1); mto($$, $3); }
3587-
| expression TOK_MINUS expression
3588-
{ init($$, ID_minus); mto($$, $1); mto($$, $3); }
3589-
| TOK_PLUS expression %prec UNARY_PLUS
3590-
{ init($$, ID_unary_plus); mto($$, $2); }
3591-
| TOK_MINUS expression %prec UNARY_MINUS
3592-
{ init($$, ID_unary_minus); mto($$, $2); }
3593-
| expression TOK_ASTERIC expression
3594-
{ init($$, ID_mult); mto($$, $1); mto($$, $3); }
3595-
| expression TOK_SLASH expression
3596-
{ init($$, ID_div); mto($$, $1); mto($$, $3); }
3597-
| expression TOK_PERCENT expression
3598-
{ init($$, ID_mod); mto($$, $1); mto($$, $3); }
3599-
| expression TOK_EQUALEQUAL expression
3600-
{ init($$, ID_verilog_logical_equality); mto($$, $1); mto($$, $3); }
3601-
| expression TOK_EXCLAMEQUAL expression
3602-
{ init($$, ID_verilog_logical_inequality); mto($$, $1); mto($$, $3); }
3603-
| expression TOK_EQUALEQUALEQUAL expression
3604-
{ init($$, ID_verilog_case_equality); mto($$, $1); mto($$, $3); }
3605-
| expression TOK_EXCLAMEQUALEQUAL expression
3606-
{ init($$, ID_verilog_case_inequality); mto($$, $1); mto($$, $3); }
3607-
| expression TOK_AMPERAMPER expression
3608-
{ init($$, ID_and); mto($$, $1); mto($$, $3); }
3609-
| expression TOK_ASTERICASTERIC expression
3610-
{ init($$, ID_power); mto($$, $1); mto($$, $3); }
3611-
| expression TOK_VERTBARVERTBAR expression
3612-
{ init($$, ID_or); mto($$, $1); mto($$, $3); }
3613-
| expression TOK_LESS expression
3614-
{ init($$, ID_lt); mto($$, $1); mto($$, $3); }
3615-
| expression TOK_LESSEQUAL expression
3616-
{ init($$, ID_le); mto($$, $1); mto($$, $3); }
3617-
| expression TOK_GREATER expression
3618-
{ init($$, ID_gt); mto($$, $1); mto($$, $3); }
3619-
| expression TOK_GREATEREQUAL expression
3620-
{ init($$, ID_ge); mto($$, $1); mto($$, $3); }
3621-
| expression TOK_AMPER expression
3622-
{ init($$, ID_bitand); mto($$, $1); mto($$, $3); }
3623-
| expression TOK_VERTBAR expression
3624-
{ init($$, ID_bitor); mto($$, $1); mto($$, $3); }
3625-
| expression TOK_CARET expression
3626-
{ init($$, ID_bitxor); mto($$, $1); mto($$, $3); }
3627-
| expression TOK_TILDECARET expression
3628-
{ init($$, ID_bitxnor); mto($$, $1); mto($$, $3); }
3629-
| expression TOK_LESSLESS expression
3630-
{ init($$, ID_shl); mto($$, $1); mto($$, $3); }
3631-
| expression TOK_LESSLESSLESS expression
3632-
{ init($$, ID_shl); mto($$, $1); mto($$, $3); }
3633-
| expression TOK_GREATERGREATER expression
3634-
{ init($$, ID_lshr); mto($$, $1); mto($$, $3); }
3635-
| expression TOK_GREATERGREATERGREATER expression
3636-
// This is an arithmetic right shift for signed expressions,
3637-
// and a logical right shift otherwise -- the type checker
3638-
// will determine.
3639-
{ init($$, ID_shr); mto($$, $1); mto($$, $3); }
3640-
| expression TOK_QUESTION expression TOK_COLON expression
3641-
{ init($$, ID_if); mto($$, $1); mto($$, $3); mto($$, $5); }
3642-
| TOK_QSTRING
3643-
{ init($$, ID_constant); stack_expr($$).type()=typet(ID_string); addswap($$, ID_value, $1); }
3644-
;
3645-
36463646
// System Verilog standard 1800-2017
36473647
// A.8.6 Operators
36483648

0 commit comments

Comments
 (0)