@@ -481,25 +481,44 @@ def lex_init()
481
481
Token ( TkNL )
482
482
end
483
483
484
+ @OP . def_rules ( "=" ) do
485
+ |op , io |
486
+ case @lex_state
487
+ when :EXPR_FNAME , :EXPR_DOT
488
+ @lex_state = :EXPR_ARG
489
+ else
490
+ @lex_state = :EXPR_BEG
491
+ end
492
+ Token ( op )
493
+ end
494
+
484
495
@OP . def_rules ( "*" , "**" ,
485
- "=" , "= =", "===" ,
496
+ "==" , "===" ,
486
497
"=~" , "<=>" ,
487
498
"<" , "<=" ,
488
499
">" , ">=" , ">>" , "=>" ) do
489
500
|op , io |
490
501
case @lex_state
491
502
when :EXPR_FNAME , :EXPR_DOT
503
+ tk = Token ( TkId , op )
492
504
@lex_state = :EXPR_ARG
493
505
else
506
+ tk = Token ( op )
494
507
@lex_state = :EXPR_BEG
495
508
end
496
- Token ( op )
509
+ tk
497
510
end
498
511
499
512
@OP . def_rules ( "!" , "!=" , "!~" ) do
500
513
|op , io |
501
- @lex_state = :EXPR_BEG
502
- Token ( op )
514
+ case @lex_state
515
+ when :EXPR_FNAME , :EXPR_DOT
516
+ @lex_state = :EXPR_ARG
517
+ Token ( TkId , op )
518
+ else
519
+ @lex_state = :EXPR_BEG
520
+ Token ( op )
521
+ end
503
522
end
504
523
505
524
@OP . def_rules ( "<<" ) do
@@ -513,11 +532,12 @@ def lex_init()
513
532
end
514
533
end
515
534
unless tk
516
- tk = Token ( op )
517
535
case @lex_state
518
536
when :EXPR_FNAME , :EXPR_DOT
537
+ tk = Token ( TkId , op )
519
538
@lex_state = :EXPR_ARG
520
539
else
540
+ tk = Token ( op )
521
541
@lex_state = :EXPR_BEG
522
542
end
523
543
end
@@ -531,9 +551,9 @@ def lex_init()
531
551
532
552
@OP . def_rules ( "`" ) do
533
553
|op , io |
534
- if @lex_state == :EXPR_FNAME
535
- @lex_state = :EXPR_END
536
- Token ( op )
554
+ if :EXPR_FNAME == @lex_state or :EXPR_DOT == @lex_state
555
+ @lex_state = :EXPR_ARG
556
+ Token ( TkId , op )
537
557
else
538
558
identify_string ( op )
539
559
end
@@ -557,12 +577,25 @@ def lex_init()
557
577
end
558
578
end
559
579
560
- @OP . def_rules ( "&" , "&&" , "| ", "||" ) do
580
+ @OP . def_rules ( "&& " , "||" ) do
561
581
|op , io |
562
582
@lex_state = :EXPR_BEG
563
583
Token ( op )
564
584
end
565
585
586
+ @OP . def_rules ( "&" , "|" ) do
587
+ |op , io |
588
+ case @lex_state
589
+ when :EXPR_FNAME , :EXPR_DOT
590
+ tk = Token ( TkId , op )
591
+ @lex_state = :EXPR_ARG
592
+ else
593
+ tk = Token ( op )
594
+ @lex_state = :EXPR_BEG
595
+ end
596
+ tk
597
+ end
598
+
566
599
@OP . def_rules ( "+=" , "-=" , "*=" , "**=" ,
567
600
"&=" , "|=" , "^=" , "<<=" , ">>=" , "||=" , "&&=" ) do
568
601
|op , io |
@@ -574,19 +607,22 @@ def lex_init()
574
607
@OP . def_rule ( "+@" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
575
608
|op , io |
576
609
@lex_state = :EXPR_ARG
577
- Token ( op )
610
+ Token ( TkId , op )
578
611
end
579
612
580
613
@OP . def_rule ( "-@" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
581
614
|op , io |
582
615
@lex_state = :EXPR_ARG
583
- Token ( op )
616
+ Token ( TkId , op )
584
617
end
585
618
586
619
@OP . def_rules ( "+" , "-" ) do
587
620
|op , io |
588
621
catch ( :RET ) do
589
- if @lex_state == :EXPR_ARG
622
+ if :EXPR_FNAME == @lex_state or :EXPR_DOT == @lex_state
623
+ tk = Token ( TkId , op )
624
+ @lex_state = :EXPR_ARG
625
+ elsif @lex_state == :EXPR_ARG
590
626
if @space_seen and peek ( 0 ) =~ /[0-9]/
591
627
throw :RET , identify_number ( op )
592
628
else
@@ -597,7 +633,8 @@ def lex_init()
597
633
else
598
634
@lex_state = :EXPR_BEG
599
635
end
600
- Token ( op )
636
+ tk = Token ( op ) unless tk
637
+ tk
601
638
end
602
639
end
603
640
@@ -657,7 +694,10 @@ def lex_int2
657
694
658
695
@OP . def_rule ( "/" ) do
659
696
|op , io |
660
- if @lex_state == :EXPR_BEG || @lex_state == :EXPR_MID
697
+ if :EXPR_FNAME == @lex_state or :EXPR_DOT == @lex_state
698
+ @lex_state = :EXPR_ARG
699
+ Token ( TkId , op )
700
+ elsif @lex_state == :EXPR_BEG || @lex_state == :EXPR_MID
661
701
identify_string ( op )
662
702
elsif peek ( 0 ) == '='
663
703
getc
@@ -673,8 +713,15 @@ def lex_int2
673
713
674
714
@OP . def_rules ( "^" ) do
675
715
|op , io |
676
- @lex_state = :EXPR_BEG
677
- Token ( "^" )
716
+ case @lex_state
717
+ when :EXPR_FNAME , :EXPR_DOT
718
+ tk = Token ( TkId , op )
719
+ @lex_state = :EXPR_ARG
720
+ else
721
+ tk = Token ( op )
722
+ @lex_state = :EXPR_BEG
723
+ end
724
+ tk
678
725
end
679
726
680
727
# @OP.def_rules("^=") do
@@ -701,8 +748,14 @@ def lex_int2
701
748
702
749
@OP . def_rule ( "~" ) do
703
750
|op , io |
704
- @lex_state = :EXPR_BEG
705
- Token ( "~" )
751
+ case @lex_state
752
+ when :EXPR_FNAME , :EXPR_DOT
753
+ @lex_state = :EXPR_ARG
754
+ Token ( TkId , op )
755
+ else
756
+ @lex_state = :EXPR_BEG
757
+ Token ( op )
758
+ end
706
759
end
707
760
708
761
@OP . def_rule ( "~@" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
@@ -728,13 +781,13 @@ def lex_int2
728
781
@OP . def_rule ( "[]" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
729
782
|op , io |
730
783
@lex_state = :EXPR_ARG
731
- Token ( "[]" )
784
+ Token ( TkId , op )
732
785
end
733
786
734
787
@OP . def_rule ( "[]=" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
735
788
|op , io |
736
789
@lex_state = :EXPR_ARG
737
- Token ( "[]=" )
790
+ Token ( TkId , op )
738
791
end
739
792
740
793
@OP . def_rule ( "[" ) do
@@ -796,7 +849,10 @@ def lex_int2
796
849
797
850
@OP . def_rule ( '%' ) do
798
851
|op , io |
799
- if @lex_state == :EXPR_BEG || @lex_state == :EXPR_MID
852
+ if :EXPR_FNAME == @lex_state or :EXPR_DOT == @lex_state
853
+ @lex_state = :EXPR_ARG
854
+ Token ( TkId , op )
855
+ elsif @lex_state == :EXPR_BEG || @lex_state == :EXPR_MID
800
856
identify_quotation
801
857
elsif peek ( 0 ) == '='
802
858
getc
0 commit comments