Example #1
0
 /**
  * @param TokenTypes $tokens
  * @throws \RuntimeException
  * @return array|TokenMatchReader[]
  */
 public static function regexPatterns(TokenTypes $tokens = null)
 {
     if (is_null($tokens)) {
         $tokens = new TokenTypes();
     }
     $requiredTokens = array(TokenTypes::ENUM_CONCATENATE, TokenTypes::ENUM_DEFINITION_LIST_START, TokenTypes::ENUM_DEFINITION_SEPARATOR, TokenTypes::ENUM_START_REPEAT, TokenTypes::ENUM_END_REPEAT, TokenTypes::ENUM_START_OPTION, TokenTypes::ENUM_END_OPTION, TokenTypes::ENUM_START_GROUP, TokenTypes::ENUM_END_GROUP, TokenTypes::ENUM_TERMINATOR);
     foreach ($requiredTokens as $requiredTokenType) {
         if (!$tokens->contains($requiredTokenType)) {
             throw new \RuntimeException('required token missing from enum');
         }
     }
     $regexBuilder = new RegexBuilder();
     $instance = new self($regexBuilder);
     //add longer patterns first
     $tokenPatterns = [];
     //longer patterns
     $tokenPatterns[] = $instance->buildStringLiteralPattern(TokenTypes::ENUM_STRING_LITERAL);
     $tokenPatterns[] = $instance->buildIdentifierPattern(TokenTypes::ENUM_IDENTIFIER);
     $tokenPatterns[] = $instance->buildSpecialSequencePattern(TokenTypes::ENUM_SPECIAL_SEQUENCE);
     $tokenPatterns[] = $instance->buildCommentPattern(TokenTypes::ENUM_COMMENT);
     $tokenPatterns[] = $instance->buildDefinitionListStartPattern(TokenTypes::ENUM_DEFINITION_LIST_START);
     //shorter patterns
     $tokenPatterns[] = $instance->createStringPattern(TokenTypes::ENUM_CONCATENATE, Symbols::ENUM_CONCATENATE);
     $tokenPatterns[] = $instance->createQuotedPattern(TokenTypes::ENUM_DEFINITION_SEPARATOR, Symbols::ENUM_DEFINITION_SEPARATOR);
     $tokenPatterns[] = $instance->createQuotedPattern(TokenTypes::ENUM_START_REPEAT, Symbols::ENUM_START_REPEAT);
     $tokenPatterns[] = $instance->createQuotedPattern(TokenTypes::ENUM_END_REPEAT, Symbols::ENUM_END_REPEAT);
     $tokenPatterns[] = $instance->createQuotedPattern(TokenTypes::ENUM_START_OPTION, Symbols::ENUM_START_OPTION);
     $tokenPatterns[] = $instance->createQuotedPattern(TokenTypes::ENUM_END_OPTION, Symbols::ENUM_END_OPTION);
     $tokenPatterns[] = $instance->createQuotedPattern(TokenTypes::ENUM_START_GROUP, Symbols::ENUM_START_GROUP);
     $tokenPatterns[] = $instance->createQuotedPattern(TokenTypes::ENUM_END_GROUP, Symbols::ENUM_END_GROUP);
     $tokenPatterns[] = $instance->buildTerminatorPattern(TokenTypes::ENUM_TERMINATOR);
     return $tokenPatterns;
 }