@@ -479,25 +479,44 @@ def lex_init()
479479 Token ( TkNL )
480480 end
481481
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+
482493 @OP . def_rules ( "*" , "**" ,
483- "=" , "= =", "===" ,
494+ "==" , "===" ,
484495 "=~" , "<=>" ,
485496 "<" , "<=" ,
486497 ">" , ">=" , ">>" ) do
487498 |op , io |
488499 case @lex_state
489500 when :EXPR_FNAME , :EXPR_DOT
501+ tk = Token ( TkId , op )
490502 @lex_state = :EXPR_ARG
491503 else
504+ tk = Token ( op )
492505 @lex_state = :EXPR_BEG
493506 end
494- Token ( op )
507+ tk
495508 end
496509
497510 @OP . def_rules ( "!" , "!=" , "!~" ) do
498511 |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
501520 end
502521
503522 @OP . def_rules ( "<<" ) do
@@ -511,11 +530,12 @@ def lex_init()
511530 end
512531 end
513532 unless tk
514- tk = Token ( op )
515533 case @lex_state
516534 when :EXPR_FNAME , :EXPR_DOT
535+ tk = Token ( TkId , op )
517536 @lex_state = :EXPR_ARG
518537 else
538+ tk = Token ( op )
519539 @lex_state = :EXPR_BEG
520540 end
521541 end
@@ -529,9 +549,9 @@ def lex_init()
529549
530550 @OP . def_rules ( "`" ) do
531551 |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 )
535555 else
536556 identify_string ( op )
537557 end
@@ -555,12 +575,25 @@ def lex_init()
555575 end
556576 end
557577
558- @OP . def_rules ( "&" , "&&" , "| ", "||" ) do
578+ @OP . def_rules ( "&& " , "||" ) do
559579 |op , io |
560580 @lex_state = :EXPR_BEG
561581 Token ( op )
562582 end
563583
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+
564597 @OP . def_rules ( "+=" , "-=" , "*=" , "**=" ,
565598 "&=" , "|=" , "^=" , "<<=" , ">>=" , "||=" , "&&=" ) do
566599 |op , io |
@@ -572,19 +605,22 @@ def lex_init()
572605 @OP . def_rule ( "+@" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
573606 |op , io |
574607 @lex_state = :EXPR_ARG
575- Token ( op )
608+ Token ( TkId , op )
576609 end
577610
578611 @OP . def_rule ( "-@" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
579612 |op , io |
580613 @lex_state = :EXPR_ARG
581- Token ( op )
614+ Token ( TkId , op )
582615 end
583616
584617 @OP . def_rules ( "+" , "-" ) do
585618 |op , io |
586619 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
588624 if @space_seen and peek ( 0 ) =~ /[0-9]/
589625 throw :RET , identify_number ( op )
590626 else
@@ -595,7 +631,8 @@ def lex_init()
595631 else
596632 @lex_state = :EXPR_BEG
597633 end
598- Token ( op )
634+ tk = Token ( op ) unless tk
635+ tk
599636 end
600637 end
601638
@@ -655,7 +692,10 @@ def lex_int2
655692
656693 @OP . def_rule ( "/" ) do
657694 |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
659699 identify_string ( op )
660700 elsif peek ( 0 ) == '='
661701 getc
@@ -671,8 +711,15 @@ def lex_int2
671711
672712 @OP . def_rules ( "^" ) do
673713 |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
676723 end
677724
678725 # @OP.def_rules("^=") do
@@ -699,8 +746,14 @@ def lex_int2
699746
700747 @OP . def_rule ( "~" ) do
701748 |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
704757 end
705758
706759 @OP . def_rule ( "~@" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
@@ -726,13 +779,13 @@ def lex_int2
726779 @OP . def_rule ( "[]" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
727780 |op , io |
728781 @lex_state = :EXPR_ARG
729- Token ( "[]" )
782+ Token ( TkId , op )
730783 end
731784
732785 @OP . def_rule ( "[]=" , proc { |op , io | @lex_state == :EXPR_FNAME } ) do
733786 |op , io |
734787 @lex_state = :EXPR_ARG
735- Token ( "[]=" )
788+ Token ( TkId , op )
736789 end
737790
738791 @OP . def_rule ( "[" ) do
@@ -781,7 +834,10 @@ def lex_int2
781834
782835 @OP . def_rule ( '%' ) do
783836 |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
785841 identify_quotation
786842 elsif peek ( 0 ) == '='
787843 getc
0 commit comments