Skip to content

Commit 0441b5d

Browse files
committed
упорядочивание токенов; замена цепочек сравнений
1 parent f4b8b27 commit 0441b5d

File tree

2 files changed

+79
-48
lines changed

2 files changed

+79
-48
lines changed

src/OneScript.Language/LanguageDef.cs

Lines changed: 71 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ public static string GetTokenName(Token token)
247247

248248
return Enum.GetName(typeof(Token), token);
249249
}
250+
250251
public static string GetTokenAlias(Token token)
251252
{
252253
if (_keywords.TryGetValue(token,out var strings))
@@ -257,11 +258,9 @@ public static string GetTokenAlias(Token token)
257258
return Enum.GetName(typeof(Token), token);
258259
}
259260

260-
261261
public static Token GetToken(string tokText)
262262
{
263-
Token result;
264-
if (_stringToToken.TryGetValue(tokText, out result))
263+
if (_stringToToken.TryGetValue(tokText, out Token result))
265264
{
266265
return result;
267266
}
@@ -284,22 +283,28 @@ public static bool IsBuiltInFunction(Token token)
284283

285284
[MethodImpl(MethodImplOptions.AggressiveInlining)]
286285
public static bool IsBinaryOperator(Token token)
287-
{
288-
return token == Token.Plus
289-
|| token == Token.Minus
290-
|| token == Token.Multiply
291-
|| token == Token.Division
292-
|| token == Token.Modulo
293-
|| token == Token.And
294-
|| token == Token.Or
295-
|| token == Token.LessThan
296-
|| token == Token.LessOrEqual
297-
|| token == Token.MoreThan
298-
|| token == Token.MoreOrEqual
299-
|| token == Token.Equal
300-
|| token == Token.NotEqual;
301-
}
302-
286+
{
287+
switch (token)
288+
{
289+
case Token.Plus:
290+
case Token.Minus:
291+
case Token.Multiply:
292+
case Token.Division:
293+
case Token.Modulo:
294+
case Token.Equal:
295+
case Token.LessThan:
296+
case Token.LessOrEqual:
297+
case Token.MoreThan:
298+
case Token.MoreOrEqual:
299+
case Token.NotEqual:
300+
case Token.And:
301+
case Token.Or:
302+
return true;
303+
default:
304+
return false;
305+
}
306+
}
307+
303308
[MethodImpl(MethodImplOptions.AggressiveInlining)]
304309
public static bool IsLogicalBinaryOperator(Token token)
305310
{
@@ -315,24 +320,42 @@ public static bool IsUnaryOperator(Token token)
315320
[MethodImpl(MethodImplOptions.AggressiveInlining)]
316321
public static bool IsLiteral(in Lexem lex)
317322
{
318-
return lex.Type == LexemType.StringLiteral
319-
|| lex.Type == LexemType.NumberLiteral
320-
|| lex.Type == LexemType.BooleanLiteral
321-
|| lex.Type == LexemType.DateLiteral
322-
|| lex.Type == LexemType.UndefinedLiteral
323-
|| lex.Type == LexemType.NullLiteral;
323+
switch (lex.Type)
324+
{
325+
case LexemType.StringLiteral:
326+
case LexemType.NumberLiteral:
327+
case LexemType.BooleanLiteral:
328+
case LexemType.DateLiteral:
329+
case LexemType.UndefinedLiteral:
330+
case LexemType.NullLiteral:
331+
return true;
332+
default:
333+
return false;
334+
}
324335
}
325336

326337
[MethodImpl(MethodImplOptions.AggressiveInlining)]
327338
public static bool IsValidPropertyName(in Lexem lex)
328339
{
329-
return lex.Type == LexemType.Identifier
330-
|| lex.Type == LexemType.BooleanLiteral
331-
|| lex.Type == LexemType.NullLiteral
332-
|| lex.Type == LexemType.UndefinedLiteral
333-
|| lex.Token == Token.And
334-
|| lex.Token == Token.Or
335-
|| lex.Token == Token.Not;
340+
switch (lex.Type)
341+
{
342+
case LexemType.Identifier:
343+
case LexemType.BooleanLiteral:
344+
case LexemType.NullLiteral:
345+
case LexemType.UndefinedLiteral:
346+
return true;
347+
348+
default:
349+
switch (lex.Token)
350+
{
351+
case Token.And:
352+
case Token.Or:
353+
case Token.Not:
354+
return true;
355+
default:
356+
return false;
357+
}
358+
}
336359
}
337360

338361
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -394,17 +417,22 @@ public static bool IsBeginOfStatement(Token token)
394417

395418
[MethodImpl(MethodImplOptions.AggressiveInlining)]
396419
public static bool IsEndOfBlockToken(Token token)
397-
{
398-
return token == Token.EndIf
399-
|| token == Token.EndProcedure
400-
|| token == Token.EndFunction
401-
|| token == Token.Else
402-
|| token == Token.EndLoop
403-
|| token == Token.EndTry
404-
|| token == Token.EndOfText
405-
|| token == Token.ElseIf
406-
|| token == Token.Exception
407-
;
420+
{
421+
switch (token)
422+
{
423+
case Token.EndIf:
424+
case Token.EndProcedure:
425+
case Token.EndFunction:
426+
case Token.Else:
427+
case Token.EndLoop:
428+
case Token.EndTry:
429+
case Token.EndOfText:
430+
case Token.ElseIf:
431+
case Token.Exception:
432+
return true;
433+
default:
434+
return false;
435+
}
408436
}
409437

410438
[MethodImpl(MethodImplOptions.AggressiveInlining)]

src/OneScript.Language/LexicalAnalysis/Token.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,15 @@ public enum Token
4343
RemoveHandler,
4444
Async,
4545
Await,
46-
Goto,
47-
48-
// operators
46+
Goto,
47+
48+
// operators
49+
UnaryPlus,
50+
UnaryMinus,
51+
// binary begin
52+
// recommend to be in continuous block
4953
Plus,
5054
Minus,
51-
UnaryPlus,
52-
UnaryMinus,
5355
Multiply,
5456
Division,
5557
Modulo,
@@ -61,6 +63,7 @@ public enum Token
6163
NotEqual,
6264
And,
6365
Or,
66+
// binary end
6467
Not,
6568
Dot,
6669
OpenPar,

0 commit comments

Comments
 (0)