@@ -479,25 +479,44 @@ def lex_init()
479
479
Token ( TkNL )
480
480
end
481
481
482
+ @OP . def_rules ( "=" ) do
483
+ |op , io |
484
+ case @lex_state
485
+ when :EXPR_FNAME , :EXPR_DOT
486
+ @lex_state = :EXPR_ARG
487
+ else
488
+ @lex_state = :EXPR_BEG
489
+ end
490
+ Token ( op )
491
+ end
492
+
482
493
@OP . def_rules ( "*" , "**" ,
483
- "=" , "= =", "===" ,
494
+ "==" , "===" ,
484
495
"=~" , "<=>" ,
485
496
"<" , "<=" ,
486
497
">" , ">=" , ">>" ) do
487
498
|op , io |
488
499
case @lex_state
489
500
when :EXPR_FNAME , :EXPR_DOT
501
+ tk = Token ( TkId , op )
490
502
@lex_state = :EXPR_ARG
491
503
else
504
+ tk = Token ( op )
492
505
@lex_state = :EXPR_BEG
493
506
end
494
- Token ( op )
507
+ tk
495
508
end
496
509
497
510
@OP . def_rules ( "!" , "!=" , "!~" ) do
498
511
|op , io |
499
- @lex_state = :EXPR_BEG
500
- Token ( op )
512
+ case @lex_state
513
+ when :EXPR_FNAME , :EXPR_DOT
514
+ @lex_state = :EXPR_ARG
515
+ Token ( TkId , op )
516
+ else
517
+ @lex_state = :EXPR_BEG
518
+ Token ( op )
519
+ end
501
520
end
502
521
503
522
@OP . def_rules ( "<<" ) do
@@ -511,11 +530,12 @@ def lex_init()
511
530
end
512
531
end
513
532
unless tk
514
- tk = Token ( op )
515
533
case @lex_state
516
534
when :EXPR_FNAME , :EXPR_DOT
535
+ tk = Token ( TkId , op )
517
536
@lex_state = :EXPR_ARG
518
537
else
538
+ tk = Token ( op )
519
539
@lex_state = :EXPR_BEG
520
540
end
521
541
end
@@ -529,9 +549,9 @@ def lex_init()
529
549
530
550
@OP . def_rules ( "`" ) do
531
551
|op , io |
532
- if @lex_state == :EXPR_FNAME
533
- @lex_state = :EXPR_END
534
- Token ( op )
552
+ if :EXPR_FNAME == @lex_state or :EXPR_DOT == @lex_state
553
+ @lex_state = :EXPR_ARG
554
+ Token ( TkId , op )
535
555
else
536
556
identify_string ( op )
537
557
end
@@ -555,12 +575,25 @@ def lex_init()
555
575
end
556
576
end
557
577
558
- @OP . def_rules ( "&" , "&&" , "| ", "||" ) do
578
+ @OP . def_rules ( "&& " , "||" ) do
559
579
|op , io |
560
580
@lex_state = :EXPR_BEG
561
581
Token ( op )
562
582
end
563
583
584
+ @OP . def_rules ( "&" , "|" ) do
585
+ |op , io |
586
+ case @lex_state
587
+ when :EXPR_FNAME , :EXPR_DOT
588
+ tk = Token ( TkId , op )
589
+ @lex_state = :EXPR_ARG
590
+ else
591
+ tk = Token ( op )
592
+ @lex_state = :EXPR_BEG
593
+ end
594
+ tk
595
+ end
596
+
564
597
@OP . def_rules ( "+=" , "-=" , "*=" , "**=" ,
565
598
"&=" , "|=" , "^=" , "<<=" , ">>=" , "||=" , "&&=" ) do
566
599
|op , io |
@@ -572,19 +605,22 @@ def lex_init()
572
605
@OP . def_rule ( "+@" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
573
606
|op , io |
574
607
@lex_state = :EXPR_ARG
575
- Token ( op )
608
+ Token ( TkId , op )
576
609
end
577
610
578
611
@OP . def_rule ( "-@" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
579
612
|op , io |
580
613
@lex_state = :EXPR_ARG
581
- Token ( op )
614
+ Token ( TkId , op )
582
615
end
583
616
584
617
@OP . def_rules ( "+" , "-" ) do
585
618
|op , io |
586
619
catch ( :RET ) do
587
- if @lex_state == :EXPR_ARG
620
+ if :EXPR_FNAME == @lex_state or :EXPR_DOT == @lex_state
621
+ tk = Token ( TkId , op )
622
+ @lex_state = :EXPR_ARG
623
+ elsif @lex_state == :EXPR_ARG
588
624
if @space_seen and peek ( 0 ) =~ /[0-9]/
589
625
throw :RET , identify_number ( op )
590
626
else
@@ -595,7 +631,8 @@ def lex_init()
595
631
else
596
632
@lex_state = :EXPR_BEG
597
633
end
598
- Token ( op )
634
+ tk = Token ( op ) unless tk
635
+ tk
599
636
end
600
637
end
601
638
@@ -655,7 +692,10 @@ def lex_int2
655
692
656
693
@OP . def_rule ( "/" ) do
657
694
|op , io |
658
- if @lex_state == :EXPR_BEG || @lex_state == :EXPR_MID
695
+ if :EXPR_FNAME == @lex_state or :EXPR_DOT == @lex_state
696
+ @lex_state = :EXPR_ARG
697
+ Token ( TkId , op )
698
+ elsif @lex_state == :EXPR_BEG || @lex_state == :EXPR_MID
659
699
identify_string ( op )
660
700
elsif peek ( 0 ) == '='
661
701
getc
@@ -671,8 +711,15 @@ def lex_int2
671
711
672
712
@OP . def_rules ( "^" ) do
673
713
|op , io |
674
- @lex_state = :EXPR_BEG
675
- Token ( "^" )
714
+ case @lex_state
715
+ when :EXPR_FNAME , :EXPR_DOT
716
+ tk = Token ( TkId , op )
717
+ @lex_state = :EXPR_ARG
718
+ else
719
+ tk = Token ( op )
720
+ @lex_state = :EXPR_BEG
721
+ end
722
+ tk
676
723
end
677
724
678
725
# @OP.def_rules("^=") do
@@ -699,8 +746,14 @@ def lex_int2
699
746
700
747
@OP . def_rule ( "~" ) do
701
748
|op , io |
702
- @lex_state = :EXPR_BEG
703
- Token ( "~" )
749
+ case @lex_state
750
+ when :EXPR_FNAME , :EXPR_DOT
751
+ @lex_state = :EXPR_ARG
752
+ Token ( TkId , op )
753
+ else
754
+ @lex_state = :EXPR_BEG
755
+ Token ( op )
756
+ end
704
757
end
705
758
706
759
@OP . def_rule ( "~@" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
@@ -726,13 +779,13 @@ def lex_int2
726
779
@OP . def_rule ( "[]" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
727
780
|op , io |
728
781
@lex_state = :EXPR_ARG
729
- Token ( "[]" )
782
+ Token ( TkId , op )
730
783
end
731
784
732
785
@OP . def_rule ( "[]=" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
733
786
|op , io |
734
787
@lex_state = :EXPR_ARG
735
- Token ( "[]=" )
788
+ Token ( TkId , op )
736
789
end
737
790
738
791
@OP . def_rule ( "[" ) do
@@ -781,7 +834,10 @@ def lex_int2
781
834
782
835
@OP . def_rule ( '%' ) do
783
836
|op , io |
784
- if @lex_state == :EXPR_BEG || @lex_state == :EXPR_MID
837
+ if :EXPR_FNAME == @lex_state or :EXPR_DOT == @lex_state
838
+ @lex_state = :EXPR_ARG
839
+ Token ( TkId , op )
840
+ elsif @lex_state == :EXPR_BEG || @lex_state == :EXPR_MID
785
841
identify_quotation
786
842
elsif peek ( 0 ) == '='
787
843
getc
0 commit comments