@@ -3451,6 +3451,97 @@ constant_range:
3451
3451
{ init($$ , ID_verilog_non_indexed_part_select); mto($$ , $1 ); mto($$ , $3 ); }
3452
3452
;
3453
3453
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
+
3454
3545
indexed_range :
3455
3546
expression TOK_PLUSCOLON constant_expression
3456
3547
{ init($$ , ID_verilog_indexed_part_select_plus); mto($$ , $1 ); mto($$ , $3 ); }
@@ -3552,97 +3643,6 @@ variable_concatenation_lvalue_brace:
3552
3643
{ $$=$1; mto($$, $3); }
3553
3644
;
3554
3645
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
-
3646
3646
// System Verilog standard 1800-2017
3647
3647
// A.8.6 Operators
3648
3648
0 commit comments