@@ -36,6 +36,7 @@ export enum TokenType {
3636 BinaryOperator ,
3737 LogicalOperator ,
3838 ComparisonOperator ,
39+ CompoundAssignmentOperator ,
3940 NotOperator ,
4041 OpenParen , // (
4142 CloseParen , // )
@@ -173,6 +174,12 @@ export function tokenize(sourceCode: string): Token[] {
173174 ">" : TokenType . ComparisonOperator ,
174175 "&&" : TokenType . LogicalOperator ,
175176 "||" : TokenType . LogicalOperator ,
177+ "+=" : TokenType . CompoundAssignmentOperator ,
178+ "*=" : TokenType . CompoundAssignmentOperator ,
179+ "/=" : TokenType . CompoundAssignmentOperator ,
180+ "-=" : TokenType . CompoundAssignmentOperator ,
181+ "%=" : TokenType . CompoundAssignmentOperator ,
182+ "^=" : TokenType . CompoundAssignmentOperator ,
176183 } ;
177184
178185 for ( const operator in operators ) {
@@ -199,9 +206,8 @@ export function tokenize(sourceCode: string): Token[] {
199206 if ( src [ 0 ] === '"' ) {
200207 src . shift ( ) ; // Consume the closing double quote
201208 return getToken ( string , TokenType . String , line_cnt ) ;
202- } else {
203- throw `SyntaxError:line:${ line_cnt } : missing terminating '"' character.` ;
204209 }
210+ throw `SyntaxError:line:${ line_cnt } : missing terminating '"' character.` ;
205211 }
206212
207213 if ( src [ 0 ] === "'" ) {
@@ -215,11 +221,20 @@ export function tokenize(sourceCode: string): Token[] {
215221 if ( src [ 0 ] === "'" ) {
216222 src . shift ( ) ; // Consume the closing double quote
217223 return getToken ( string , TokenType . String , line_cnt ) ;
218- } else {
219- throw `SyntaxError:line:${ line_cnt } : missing terminating ''' character.` ;
220224 }
225+ throw `SyntaxError:line:${ line_cnt } : missing terminating ''' character.` ;
221226 }
222227
228+ if (
229+ src [ 0 ] === "+" ||
230+ src [ 0 ] === "-" ||
231+ src [ 0 ] === "*" ||
232+ src [ 0 ] === "/" ||
233+ src [ 0 ] === "%" ||
234+ src [ 0 ] === "^"
235+ ) {
236+ return getToken ( src . shift ( ) , TokenType . BinaryOperator , line_cnt ) ;
237+ }
223238 return null ;
224239 }
225240
@@ -268,15 +283,6 @@ export function tokenize(sourceCode: string): Token[] {
268283 tokens . push ( getToken ( src . shift ( ) , TokenType . OpenBracket , line_cnt ) ) ;
269284 } else if ( src [ 0 ] === "]" ) {
270285 tokens . push ( getToken ( src . shift ( ) , TokenType . CloseBracket , line_cnt ) ) ;
271- } else if (
272- src [ 0 ] === "+" ||
273- src [ 0 ] === "-" ||
274- src [ 0 ] === "*" ||
275- src [ 0 ] === "/" ||
276- src [ 0 ] === "%" ||
277- src [ 0 ] === "^"
278- ) {
279- tokens . push ( getToken ( src . shift ( ) , TokenType . BinaryOperator , line_cnt ) ) ;
280286 } else if ( src [ 0 ] === ";" ) {
281287 tokens . push ( getToken ( src . shift ( ) , TokenType . Semicolon , line_cnt ) ) ;
282288 } else if ( src [ 0 ] === "!" ) {
@@ -328,5 +334,6 @@ export function tokenize(sourceCode: string): Token[] {
328334
329335 // Push EOF token
330336 tokens . push ( { type : TokenType . EOF , value : "EndOfFile" , curr_line : line_cnt } ) ;
337+
331338 return tokens ;
332339}
0 commit comments