@@ -154,30 +154,17 @@ private Token ReadToken()
154154 {
155155 case '|' :
156156 CursorCharNext ( ) ;
157- return CreateToken ( TokenType . Op_BitwiseOr_Or_Lambda , fromLine , fromCol , "|" ) ;
157+ return CreateToken ( TokenType . Lambda , fromLine , fromCol , "|" ) ;
158158 case ';' :
159159 CursorCharNext ( ) ;
160160 return CreateToken ( TokenType . SemiColon , fromLine , fromCol , ";" ) ;
161161 case '=' :
162162 return PotentiallyDoubleCharOperator ( '=' , TokenType . Op_Assignment , TokenType . Op_Equal , fromLine , fromCol ) ;
163- case '&' :
164- CursorCharNext ( ) ;
165- return CreateToken ( TokenType . Op_BitwiseAnd , fromLine , fromCol , "&" ) ;
166163 case '<' :
167- return PotentiallyDoubleCharOperator ( '=' , '<' , TokenType . Op_LessThan , TokenType . Op_LessThanEqual , TokenType . Op_BitwiseLShift , fromLine , fromCol ) ;
164+ return PotentiallyDoubleCharOperator ( '=' , TokenType . Op_LessThan , TokenType . Op_LessThanEqual , fromLine , fromCol ) ;
168165 case '>' :
169- return PotentiallyDoubleCharOperator ( '=' , '>' , TokenType . Op_GreaterThan , TokenType . Op_GreaterThanEqual , TokenType . Op_BitwiseRShift , fromLine , fromCol ) ;
166+ return PotentiallyDoubleCharOperator ( '=' , TokenType . Op_GreaterThan , TokenType . Op_GreaterThanEqual , fromLine , fromCol ) ;
170167 case '~' :
171- if ( CursorCharNext ( ) != '=' )
172- {
173- CursorCharNext ( ) ;
174- return CreateToken ( TokenType . Op_BitwiseXor_Or_BitwiseNot , fromLine , fromCol , "~" ) ;
175- }
176- else
177- {
178- CursorCharNext ( ) ;
179- return CreateToken ( TokenType . Op_NotEqual , fromLine , fromCol , "~=" ) ;
180- }
181168 case '!' :
182169 if ( CursorCharNext ( ) != '=' )
183170 throw new SyntaxErrorException ( CreateToken ( TokenType . Invalid , fromLine , fromCol ) , "unexpected symbol near '{0}'" , c ) ;
@@ -188,34 +175,39 @@ private Token ReadToken()
188175 {
189176 char next = CursorCharNext ( ) ;
190177 if ( next == '.' )
191- return PotentiallyDoubleCharOperator ( '.' , TokenType . Op_Concat , TokenType . VarArgs , fromLine , fromCol ) ;
178+ return PotentiallyDoubleCharOperator ( TokenType . Op_Concat , '.' , TokenType . VarArgs , "..." , '=' , TokenType . Op_Assignment , "..=" , fromLine , fromCol ) ;
192179 else if ( LexerUtils . CharIsDigit ( next ) )
193180 return ReadNumberToken ( fromLine , fromCol , true ) ;
194181 else
195182 return CreateToken ( TokenType . Dot , fromLine , fromCol , "." ) ;
196183 }
197184 case '+' :
198- return CreateSingleCharToken ( TokenType . Op_Add , fromLine , fromCol ) ;
185+ return PotentiallyDoubleCharOperator ( '=' , TokenType . Op_Add , TokenType . Op_Assignment , fromLine , fromCol ) ;
199186 case '-' :
200187 {
201188 char next = CursorCharNext ( ) ;
202189 if ( next == '-' )
203190 {
204191 return ReadComment ( fromLine , fromCol ) ;
205192 }
193+ else if ( next == '=' )
194+ {
195+ CursorCharNext ( ) ;
196+ return CreateToken ( TokenType . Op_Assignment , fromLine , fromCol , "-=" ) ;
197+ }
206198 else
207199 {
208200 return CreateToken ( TokenType . Op_MinusOrSub , fromLine , fromCol , "-" ) ;
209201 }
210202 }
211203 case '*' :
212- return CreateSingleCharToken ( TokenType . Op_Mul , fromLine , fromCol ) ;
204+ return PotentiallyDoubleCharOperator ( '=' , TokenType . Op_Mul , TokenType . Op_Assignment , fromLine , fromCol ) ;
213205 case '/' :
214- return PotentiallyDoubleCharOperator ( '/ ' , TokenType . Op_Div , TokenType . Op_FloorDiv , fromLine , fromCol ) ;
206+ return PotentiallyDoubleCharOperator ( '= ' , TokenType . Op_Div , TokenType . Op_Assignment , fromLine , fromCol ) ;
215207 case '%' :
216- return CreateSingleCharToken ( TokenType . Op_Mod , fromLine , fromCol ) ;
208+ return PotentiallyDoubleCharOperator ( '=' , TokenType . Op_Mod , TokenType . Op_Assignment , fromLine , fromCol ) ;
217209 case '^' :
218- return CreateSingleCharToken ( TokenType . Op_Pwr , fromLine , fromCol ) ;
210+ return PotentiallyDoubleCharOperator ( '=' , TokenType . Op_Pwr , TokenType . Op_Assignment , fromLine , fromCol ) ;
219211 case '$' :
220212 return PotentiallyDoubleCharOperator ( '{' , TokenType . Op_Dollar , TokenType . Brk_Open_Curly_Shared , fromLine , fromCol ) ;
221213 case '#' :
@@ -553,31 +545,26 @@ private Token PotentiallyDoubleCharOperator(char expectedSecondChar, TokenType s
553545 else
554546 return CreateToken ( singleCharToken , fromLine , fromCol , op ) ;
555547 }
556-
557- private Token PotentiallyDoubleCharOperator ( char expectedSecondChar , char expectedSecondChar2 , TokenType singleCharToken , TokenType doubleCharToken , TokenType doubleCharToken2 , int fromLine , int fromCol )
548+ private Token PotentiallyDoubleCharOperator ( TokenType singleCharToken , char expectedSecondChar , TokenType doubleCharToken , string doubleCharText , char alternateExpectedSecondChar , TokenType alternateDoubleCharToken , string alternateDoubleCharText , int fromLine , int fromCol )
558549 {
559550 string op = CursorChar ( ) . ToString ( ) ;
560551
561552 CursorCharNext ( ) ;
562553
563- var ch = CursorChar ( ) ;
564-
565- if ( ch == expectedSecondChar )
554+ if ( CursorChar ( ) == expectedSecondChar )
566555 {
567556 CursorCharNext ( ) ;
568- return CreateToken ( doubleCharToken , fromLine , fromCol , op + expectedSecondChar ) ;
557+ return CreateToken ( doubleCharToken , fromLine , fromCol , doubleCharText ) ;
569558 }
570- else if ( ch == expectedSecondChar2 )
559+ else if ( CursorChar ( ) == alternateExpectedSecondChar )
571560 {
572561 CursorCharNext ( ) ;
573- return CreateToken ( doubleCharToken2 , fromLine , fromCol , op + expectedSecondChar2 ) ;
562+ return CreateToken ( alternateDoubleCharToken , fromLine , fromCol , alternateDoubleCharText ) ;
574563 }
575564 else
576565 return CreateToken ( singleCharToken , fromLine , fromCol , op ) ;
577566 }
578567
579-
580-
581568 private Token CreateNameToken ( string name , int fromLine , int fromCol )
582569 {
583570 TokenType ? reservedType = Token . GetReservedTokenType ( name ) ;
@@ -592,7 +579,6 @@ private Token CreateNameToken(string name, int fromLine, int fromCol)
592579 }
593580 }
594581
595-
596582 private Token CreateToken ( TokenType tokenType , int fromLine , int fromCol , string text = null )
597583 {
598584 Token t = new Token ( tokenType , m_SourceId , fromLine , fromCol , m_Line , m_Col , m_PrevLineTo , m_PrevColTo )
@@ -618,9 +604,5 @@ private string ReadNameToken()
618604
619605 return name . ToString ( ) ;
620606 }
621-
622-
623-
624-
625607 }
626608}
0 commit comments