@@ -481,25 +481,44 @@ def lex_init()
481481 Token ( TkNL )
482482 end
483483
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+
484495 @OP . def_rules ( "*" , "**" ,
485- "=" , "= =", "===" ,
496+ "==" , "===" ,
486497 "=~" , "<=>" ,
487498 "<" , "<=" ,
488499 ">" , ">=" , ">>" , "=>" ) do
489500 |op , io |
490501 case @lex_state
491502 when :EXPR_FNAME , :EXPR_DOT
503+ tk = Token ( TkId , op )
492504 @lex_state = :EXPR_ARG
493505 else
506+ tk = Token ( op )
494507 @lex_state = :EXPR_BEG
495508 end
496- Token ( op )
509+ tk
497510 end
498511
499512 @OP . def_rules ( "!" , "!=" , "!~" ) do
500513 |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
503522 end
504523
505524 @OP . def_rules ( "<<" ) do
@@ -513,11 +532,12 @@ def lex_init()
513532 end
514533 end
515534 unless tk
516- tk = Token ( op )
517535 case @lex_state
518536 when :EXPR_FNAME , :EXPR_DOT
537+ tk = Token ( TkId , op )
519538 @lex_state = :EXPR_ARG
520539 else
540+ tk = Token ( op )
521541 @lex_state = :EXPR_BEG
522542 end
523543 end
@@ -531,9 +551,9 @@ def lex_init()
531551
532552 @OP . def_rules ( "`" ) do
533553 |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 )
537557 else
538558 identify_string ( op )
539559 end
@@ -557,12 +577,25 @@ def lex_init()
557577 end
558578 end
559579
560- @OP . def_rules ( "&" , "&&" , "| ", "||" ) do
580+ @OP . def_rules ( "&& " , "||" ) do
561581 |op , io |
562582 @lex_state = :EXPR_BEG
563583 Token ( op )
564584 end
565585
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+
566599 @OP . def_rules ( "+=" , "-=" , "*=" , "**=" ,
567600 "&=" , "|=" , "^=" , "<<=" , ">>=" , "||=" , "&&=" ) do
568601 |op , io |
@@ -574,19 +607,22 @@ def lex_init()
574607 @OP . def_rule ( "+@" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
575608 |op , io |
576609 @lex_state = :EXPR_ARG
577- Token ( op )
610+ Token ( TkId , op )
578611 end
579612
580613 @OP . def_rule ( "-@" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
581614 |op , io |
582615 @lex_state = :EXPR_ARG
583- Token ( op )
616+ Token ( TkId , op )
584617 end
585618
586619 @OP . def_rules ( "+" , "-" ) do
587620 |op , io |
588621 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
590626 if @space_seen and peek ( 0 ) =~ /[0-9]/
591627 throw :RET , identify_number ( op )
592628 else
@@ -597,7 +633,8 @@ def lex_init()
597633 else
598634 @lex_state = :EXPR_BEG
599635 end
600- Token ( op )
636+ tk = Token ( op ) unless tk
637+ tk
601638 end
602639 end
603640
@@ -657,7 +694,10 @@ def lex_int2
657694
658695 @OP . def_rule ( "/" ) do
659696 |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
661701 identify_string ( op )
662702 elsif peek ( 0 ) == '='
663703 getc
@@ -673,8 +713,15 @@ def lex_int2
673713
674714 @OP . def_rules ( "^" ) do
675715 |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
678725 end
679726
680727 # @OP.def_rules("^=") do
@@ -701,8 +748,14 @@ def lex_int2
701748
702749 @OP . def_rule ( "~" ) do
703750 |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
706759 end
707760
708761 @OP . def_rule ( "~@" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
@@ -728,13 +781,13 @@ def lex_int2
728781 @OP . def_rule ( "[]" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
729782 |op , io |
730783 @lex_state = :EXPR_ARG
731- Token ( "[]" )
784+ Token ( TkId , op )
732785 end
733786
734787 @OP . def_rule ( "[]=" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
735788 |op , io |
736789 @lex_state = :EXPR_ARG
737- Token ( "[]=" )
790+ Token ( TkId , op )
738791 end
739792
740793 @OP . def_rule ( "[" ) do
@@ -796,7 +849,10 @@ def lex_int2
796849
797850 @OP . def_rule ( '%' ) do
798851 |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
800856 identify_quotation
801857 elsif peek ( 0 ) == '='
802858 getc
0 commit comments