@@ -329,7 +329,7 @@ public static void lexical(LexerlessGrammarBuilder b) {
329
329
330
330
b .rule (EOF ).is (b .token (GenericTokenType .EOF , b .endOfInput ())).skip ();
331
331
332
- b .rule (NULL ).is (word (b , "NULL " )).skip ();
332
+ b .rule (NULL ).is (word (b , "null " )).skip ();
333
333
b .rule (CLASS_CONSTANT ).is (word (b , "__CLASS__" )).skip ();
334
334
b .rule (FILE_CONSTANT ).is (word (b , "__FILE__" )).skip ();
335
335
b .rule (DIR_CONSTANT ).is (word (b , "__DIR__" )).skip ();
@@ -340,41 +340,41 @@ public static void lexical(LexerlessGrammarBuilder b) {
340
340
b .rule (TRAIT_CONSTANT ).is (word (b , "__TRAIT__" )).skip ();
341
341
b .rule (ENUM ).is (word (b , "enum" )).skip ();
342
342
343
- b .rule (BOOLEAN_LITERAL ).is (b .firstOf (word (b , "TRUE " ), word (b , "FALSE " )));
343
+ b .rule (BOOLEAN_LITERAL ).is (b .firstOf (word (b , "true " ), word (b , "false " )));
344
344
345
345
b .rule (NEXT_IS_DOLLAR ).is (b .next (PHPPunctuator .DOLLAR ));
346
346
b .rule (VARIABLE_VARIABLE_DOLLAR ).is (PHPPunctuator .DOLLAR , b .nextNot (b .firstOf (IDENTIFIER , KEYWORDS , PHPPunctuator .LCURLYBRACE )));
347
347
348
- b .rule (ISSET ).is (word (b , "ISSET " )).skip ();
349
- b .rule (EMPTY ).is (word (b , "EMPTY " )).skip ();
350
- b .rule (INCLUDE_ONCE ).is (word (b , "INCLUDE_ONCE " )).skip ();
351
- b .rule (INCLUDE ).is (word (b , "INCLUDE " )).skip ();
352
- b .rule (EVAL ).is (word (b , "EVAL " )).skip ();
353
- b .rule (REQUIRE_ONCE ).is (word (b , "REQUIRE_ONCE " )).skip ();
354
- b .rule (REQUIRE ).is (word (b , "REQUIRE " )).skip ();
355
- b .rule (CLONE ).is (word (b , "CLONE " )).skip ();
356
- b .rule (PRINT ).is (word (b , "PRINT " )).skip ();
357
-
358
- b .rule (GET ).is (word (b , "GET " )).skip ();
359
- b .rule (SET ).is (word (b , "SET " )).skip ();
360
-
361
- b .rule (SELF ).is (word (b , "SELF " )).skip ();
362
- b .rule (PARENT ).is (word (b , "PARENT " )).skip ();
363
-
364
- b .rule (MIXED ).is (word (b , "MIXED " )).skip ();
365
- b .rule (INTEGER ).is (word (b , "INTEGER " )).skip ();
366
- b .rule (INT ).is (word (b , "INT " )).skip ();
367
- b .rule (DOUBLE ).is (word (b , "DOUBLE " )).skip ();
368
- b .rule (FLOAT ).is (word (b , "FLOAT " )).skip ();
369
- b .rule (REAL ).is (word (b , "REAL " )).skip ();
370
- b .rule (STRING ).is (word (b , "STRING " )).skip ();
371
- b .rule (OBJECT ).is (word (b , "OBJECT " )).skip ();
372
- b .rule (BOOLEAN ).is (word (b , "BOOLEAN " )).skip ();
373
- b .rule (BOOL ).is (word (b , "BOOL " )).skip ();
374
- b .rule (BINARY ).is (word (b , "BINARY " )).skip ();
375
- b .rule (ITERABLE ).is (word (b , "ITERABLE " )).skip ();
376
-
377
- b .rule (FROM ).is (word (b , "FROM " )).skip ();
348
+ b .rule (ISSET ).is (word (b , "isset " )).skip ();
349
+ b .rule (EMPTY ).is (word (b , "empty " )).skip ();
350
+ b .rule (INCLUDE_ONCE ).is (word (b , "include_once " )).skip ();
351
+ b .rule (INCLUDE ).is (word (b , "include " )).skip ();
352
+ b .rule (EVAL ).is (word (b , "eval " )).skip ();
353
+ b .rule (REQUIRE_ONCE ).is (word (b , "require_once " )).skip ();
354
+ b .rule (REQUIRE ).is (word (b , "require " )).skip ();
355
+ b .rule (CLONE ).is (word (b , "clone " )).skip ();
356
+ b .rule (PRINT ).is (word (b , "print " )).skip ();
357
+
358
+ b .rule (GET ).is (word (b , "get " )).skip ();
359
+ b .rule (SET ).is (word (b , "set " )).skip ();
360
+
361
+ b .rule (SELF ).is (word (b , "self " )).skip ();
362
+ b .rule (PARENT ).is (word (b , "parent " )).skip ();
363
+
364
+ b .rule (MIXED ).is (word (b , "mixed " )).skip ();
365
+ b .rule (INTEGER ).is (word (b , "integer " )).skip ();
366
+ b .rule (INT ).is (word (b , "int " )).skip ();
367
+ b .rule (DOUBLE ).is (word (b , "double " )).skip ();
368
+ b .rule (FLOAT ).is (word (b , "float " )).skip ();
369
+ b .rule (REAL ).is (word (b , "real " )).skip ();
370
+ b .rule (STRING ).is (word (b , "string " )).skip ();
371
+ b .rule (OBJECT ).is (word (b , "object " )).skip ();
372
+ b .rule (BOOLEAN ).is (word (b , "boolean " )).skip ();
373
+ b .rule (BOOL ).is (word (b , "bool " )).skip ();
374
+ b .rule (BINARY ).is (word (b , "binary " )).skip ();
375
+ b .rule (ITERABLE ).is (word (b , "iterable " )).skip ();
376
+
377
+ b .rule (FROM ).is (word (b , "from " )).skip ();
378
378
379
379
}
380
380
@@ -385,21 +385,21 @@ private static void keywords(LexerlessGrammarBuilder b) {
385
385
PHPKeyword tokenType = PHPKeyword .values ()[i ];
386
386
387
387
// PHP keywords are case insensitive
388
- b .rule (tokenType ).is (SPACING , keywordRegexp ( b , tokenType .getValue ()), b .nextNot (b .regexp (LexicalConstant .IDENTIFIER_PART ))).skip ();
388
+ b .rule (tokenType ).is (SPACING , caseInsensitive ( tokenType .getValue ()), b .nextNot (b .regexp (LexicalConstant .IDENTIFIER_PART ))).skip ();
389
389
if (i > 1 ) {
390
390
if (tokenType == PHPKeyword .READONLY ) {
391
391
// Readonly is only a keyword when it is not used as a function name. SONARPHP-1266
392
- rest [i - 2 ] = b .sequence (keywordRegexp ( b , "readonly" ), b .nextNot (b .regexp ("[\\ s]*\\ (" )));
392
+ rest [i - 2 ] = b .sequence (caseInsensitive ( "readonly" ), b .nextNot (b .regexp ("[\\ s]*\\ (" )));
393
393
} else {
394
- rest [i - 2 ] = keywordRegexp ( b , tokenType .getValue ());
394
+ rest [i - 2 ] = caseInsensitive ( tokenType .getValue ());
395
395
}
396
396
}
397
397
}
398
398
399
399
b .rule (KEYWORDS ).is (SPACING ,
400
400
b .firstOf (
401
- keywordRegexp ( b , PHPKeyword .getKeywordValues ()[0 ]),
402
- keywordRegexp ( b , PHPKeyword .getKeywordValues ()[1 ]),
401
+ caseInsensitive ( PHPKeyword .getKeywordValues ()[0 ]),
402
+ caseInsensitive ( PHPKeyword .getKeywordValues ()[1 ]),
403
403
rest ),
404
404
b .nextNot (b .regexp (LexicalConstant .IDENTIFIER_PART )));
405
405
}
@@ -411,10 +411,10 @@ private static void punctuators(LexerlessGrammarBuilder b) {
411
411
}
412
412
413
413
private static Object word (LexerlessGrammarBuilder b , String word ) {
414
- return b .sequence (SPACING , b . regexp ( "(?i)" + word ), b .nextNot (b .regexp (LexicalConstant .IDENTIFIER_PART )));
414
+ return b .sequence (SPACING , caseInsensitive ( word ), b .nextNot (b .regexp (LexicalConstant .IDENTIFIER_PART )));
415
415
}
416
416
417
- private static Object keywordRegexp ( LexerlessGrammarBuilder b , String keywordValue ) {
418
- return b . regexp ( "(?i)" + keywordValue );
417
+ private static Object caseInsensitive ( String value ) {
418
+ return new CaseInsensitiveStringExpression ( value );
419
419
}
420
420
}
0 commit comments