@@ -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,23 @@ 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
614
+ Token ( TkId , op )
581
615
Token ( op )
582
616
end
583
617
584
618
@OP . def_rules ( "+" , "-" ) do
585
619
|op , io |
586
620
catch ( :RET ) do
587
- if @lex_state == :EXPR_ARG
621
+ if :EXPR_FNAME == @lex_state or :EXPR_DOT == @lex_state
622
+ tk = Token ( TkId , op )
623
+ @lex_state = :EXPR_ARG
624
+ elsif @lex_state == :EXPR_ARG
588
625
if @space_seen and peek ( 0 ) =~ /[0-9]/
589
626
throw :RET , identify_number ( op )
590
627
else
@@ -595,7 +632,8 @@ def lex_init()
595
632
else
596
633
@lex_state = :EXPR_BEG
597
634
end
598
- Token ( op )
635
+ tk = Token ( op ) unless tk
636
+ tk
599
637
end
600
638
end
601
639
@@ -655,7 +693,10 @@ def lex_int2
655
693
656
694
@OP . def_rule ( "/" ) do
657
695
|op , io |
658
- if @lex_state == :EXPR_BEG || @lex_state == :EXPR_MID
696
+ if :EXPR_FNAME == @lex_state or :EXPR_DOT == @lex_state
697
+ @lex_state = :EXPR_ARG
698
+ Token ( TkId , op )
699
+ elsif @lex_state == :EXPR_BEG || @lex_state == :EXPR_MID
659
700
identify_string ( op )
660
701
elsif peek ( 0 ) == '='
661
702
getc
@@ -671,8 +712,15 @@ def lex_int2
671
712
672
713
@OP . def_rules ( "^" ) do
673
714
|op , io |
674
- @lex_state = :EXPR_BEG
675
- Token ( "^" )
715
+ case @lex_state
716
+ when :EXPR_FNAME , :EXPR_DOT
717
+ tk = Token ( TkId , op )
718
+ @lex_state = :EXPR_ARG
719
+ else
720
+ tk = Token ( op )
721
+ @lex_state = :EXPR_BEG
722
+ end
723
+ tk
676
724
end
677
725
678
726
# @OP.def_rules("^=") do
@@ -699,8 +747,14 @@ def lex_int2
699
747
700
748
@OP . def_rule ( "~" ) do
701
749
|op , io |
702
- @lex_state = :EXPR_BEG
703
- Token ( "~" )
750
+ case @lex_state
751
+ when :EXPR_FNAME , :EXPR_DOT
752
+ @lex_state = :EXPR_ARG
753
+ Token ( TkId , op )
754
+ else
755
+ @lex_state = :EXPR_BEG
756
+ Token ( op )
757
+ end
704
758
end
705
759
706
760
@OP . def_rule ( "~@" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
@@ -726,13 +780,13 @@ def lex_int2
726
780
@OP . def_rule ( "[]" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
727
781
|op , io |
728
782
@lex_state = :EXPR_ARG
729
- Token ( "[]" )
783
+ Token ( TkId , op )
730
784
end
731
785
732
786
@OP . def_rule ( "[]=" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
733
787
|op , io |
734
788
@lex_state = :EXPR_ARG
735
- Token ( "[]=" )
789
+ Token ( TkId , op )
736
790
end
737
791
738
792
@OP . def_rule ( "[" ) do
@@ -781,7 +835,10 @@ def lex_int2
781
835
782
836
@OP . def_rule ( '%' ) do
783
837
|op , io |
784
- if @lex_state == :EXPR_BEG || @lex_state == :EXPR_MID
838
+ if :EXPR_FNAME == @lex_state or :EXPR_DOT == @lex_state
839
+ @lex_state = :EXPR_ARG
840
+ Token ( TkId , op )
841
+ elsif @lex_state == :EXPR_BEG || @lex_state == :EXPR_MID
785
842
identify_quotation
786
843
elsif peek ( 0 ) == '='
787
844
getc
0 commit comments