@@ -85,6 +85,25 @@ def strterm_expand?(strterm)
85
85
[ :dquote , :dsym , :dword , :heredoc , :xquote , :regexp ] . include? type
86
86
end
87
87
88
+ def process_numeric
89
+ @lex_state = :expr_end
90
+ scanner = @scanner
91
+
92
+ if scanner . scan ( /0b?(0|1|_)+/ )
93
+ return [ :tINTEGER , scanner . matched . to_i ( 2 ) ]
94
+ elsif scanner . scan ( /0o?([0-7]|_)+/ )
95
+ return [ :tINTEGER , scanner . matched . to_i ( 8 ) ]
96
+ elsif scanner . scan ( /[\d _]+\. [\d _]+\b |[\d _]+(\. [\d _]+)?[eE][-+]?[\d _]+\b / )
97
+ return [ :tFLOAT , scanner . matched . gsub ( /_/ , '' ) . to_f ]
98
+ elsif scanner . scan ( /[\d _]+\b / )
99
+ return [ :tINTEGER , scanner . matched . gsub ( /_/ , '' ) . to_i ]
100
+ elsif scanner . scan ( /0(x|X)(\d |[a-f]|[A-F]|_)+/ )
101
+ return [ :tINTEGER , scanner . matched . to_i ( 16 ) ]
102
+ else
103
+ raise "Lexing error on numeric type: `#{ scanner . peek 5 } `"
104
+ end
105
+ end
106
+
88
107
def next_string_token
89
108
str_parse = self . strterm
90
109
scanner = @scanner
@@ -1042,20 +1061,7 @@ def yylex
1042
1061
return result , scanner . matched
1043
1062
1044
1063
elsif scanner . check ( /[0-9]/ )
1045
- @lex_state = :expr_end
1046
- if scanner . scan ( /0b?(0|1|_)+/ )
1047
- return [ :tINTEGER , scanner . matched . to_i ( 2 ) ]
1048
- elsif scanner . scan ( /0o?([0-7]|_)+/ )
1049
- return [ :tINTEGER , scanner . matched . to_i ( 8 ) ]
1050
- elsif scanner . scan ( /[\d _]+\. [\d _]+\b |[\d _]+(\. [\d _]+)?[eE][-+]?[\d _]+\b / )
1051
- return [ :tFLOAT , scanner . matched . gsub ( /_/ , '' ) . to_f ]
1052
- elsif scanner . scan ( /[\d _]+\b / )
1053
- return [ :tINTEGER , scanner . matched . gsub ( /_/ , '' ) . to_i ]
1054
- elsif scanner . scan ( /0(x|X)(\d |[a-f]|[A-F]|_)+/ )
1055
- return [ :tINTEGER , scanner . matched . to_i ( 16 ) ]
1056
- else
1057
- raise "Lexing error on numeric type: `#{ scanner . peek 5 } `"
1058
- end
1064
+ return process_numeric
1059
1065
1060
1066
elsif scanner . scan ( /(\w )+[\? \! ]?/ )
1061
1067
return process_identifier scanner . matched , cmd_start
0 commit comments