/** * Creates the rule for accessor declarations within a class. * * @param grammarBuilder ApexGrammarBuilder parameter. */ private static void accessorDeclarations(LexerfulGrammarBuilder grammarBuilder) { grammarBuilder.rule(ACCESSOR_DECLARATIONS).is( grammarBuilder.oneOrMore( ACCESSOR_DECLARATION)); }
private static void createIdentifierList() { b.rule(IDENTIFIER_LIST).is(IDENTIFIER, b.optional(b.oneOrMore(COMMA, IDENTIFIER))); }
/** * Defines the try statement rule. * * @param grammarBuilder ApexGrammarBuilder parameter. */ private static void tryStatement(LexerfulGrammarBuilder grammarBuilder) { grammarBuilder.rule(TRY_STATEMENT).is( TRY, BLOCK, grammarBuilder.oneOrMore( CATCH_STATEMENT ), grammarBuilder.optional( FINALLY, BLOCK ) ); }
public static void buildOn(LexerfulGrammarBuilder b) { b.rule(ALTER_SESSION).is(ALTER, SESSION, b.oneOrMore(b.anyTokenButNot(b.firstOf(SEMICOLON, DIVISION, EOF)))); b.rule(SET_ROLE).is(SET, ROLE, b.firstOf( NONE, b.sequence(ALL, b.optional(EXCEPT, b.oneOrMore(IDENTIFIER_NAME, b.optional(COMMA)))), b.oneOrMore(IDENTIFIER_NAME, b.optional(IDENTIFIED, BY, b.anyToken()), b.optional(COMMA)) )); b.rule(SESSION_CONTROL_COMMAND).is(b.firstOf(ALTER_SESSION, SET_ROLE), b.optional(SEMICOLON)); }
/** * @see https://golang.org/ref/spec#Import_declarations */ private static void createImport() { b.rule(IMPORT_SIMPLE).is(GoLexer.Keyword.IMPORT, GoLexer.Literals.STRING); b.rule(IMPORT_COMPLEX).is(GoLexer.Keyword.IMPORT, GoLexer.Punctuators.PAREN_L, b.oneOrMore(GoLexer.Literals.STRING), GoLexer.Punctuators.PAREN_R); b.rule(IMPORT_DEFINITION).is(b.firstOf(IMPORT_SIMPLE, IMPORT_COMPLEX)); }
b.oneOrMore(PRIVILEGE_PART), b.zeroOrMore(COMMA, b.oneOrMore(PRIVILEGE_PART)), TO, IDENTIFIER_OR_KEYWORD, b.zeroOrMore(COMMA, IDENTIFIER_OR_KEYWORD), b.optional(IDENTIFIED, BY, b.anyToken(), b.zeroOrMore(COMMA, b.anyToken())), b.oneOrMore(PRIVILEGE_PART), b.optional(PRIVILEGE_COLUMNS), b.zeroOrMore(COMMA, b.oneOrMore(PRIVILEGE_PART, b.optional(PRIVILEGE_COLUMNS))), b.optional(ON, b.oneOrMore(b.anyTokenButNot(TO))), TO, IDENTIFIER_OR_KEYWORD, b.zeroOrMore(COMMA, IDENTIFIER_OR_KEYWORD), b.optional(WITH, HIERARCHY, OPTION), b.oneOrMore(PRIVILEGE_PART), b.zeroOrMore(COMMA, b.oneOrMore(PRIVILEGE_PART)), TO, b.firstOf(FUNCTION, PROCEDURE, PACKAGE), UNIT_NAME, b.zeroOrMore(COMMA, b.firstOf(FUNCTION, PROCEDURE, PACKAGE), UNIT_NAME)
/** * @see https://golang.org/ref/spec#Function_types */ private static void createFunctionType() { b.rule(PARAMETERS_DECLARATION).is(b.optional(IDENTIFIER_LIST), TYPE); b.rule(PARAMETERS_LIST).is(PARAMETERS_DECLARATION, b.optional(b.oneOrMore(GoLexer.Punctuators.COMMA, PARAMETERS_DECLARATION))); b.rule(PARAMETERS).is(GoLexer.Punctuators.PAREN_L, b.optional(PARAMETERS_LIST, b.optional(b.oneOrMore(GoLexer.Punctuators.COMMA, PARAMETERS_LIST))), GoLexer.Punctuators.PAREN_R); b.rule(RESULT).is(b.firstOf(PARAMETERS, TYPE)); b.rule(SIGNATURE).is(PARAMETERS, b.optional(RESULT)); b.rule(FUNC_TYPE).is(GoLexer.Keyword.FUNC, SIGNATURE); }
), LBRACE, grammarBuilder.oneOrMore( WHEN, grammarBuilder.firstOf(
private static void attributes(LexerfulGrammarBuilder b) { b.rule(GLOBAL_ATTRIBUTES).is(b.oneOrMore(GLOBAL_ATTRIBUTE_SECTION)); b.rule(GLOBAL_ATTRIBUTE_SECTION).is(LBRACKET, GLOBAL_ATTRIBUTE_TARGET_SPECIFIER, ATTRIBUTE_LIST, b.optional(COMMA), RBRACKET); b.rule(GLOBAL_ATTRIBUTE_TARGET_SPECIFIER).is(GLOBAL_ATTRIBUTE_TARGET, COLON); "assembly", "module")); b.rule(ATTRIBUTES).is(b.oneOrMore(ATTRIBUTE_SECTION)); b.rule(ATTRIBUTE_SECTION).is(LBRACKET, b.optional(ATTRIBUTE_TARGET_SPECIFIER), ATTRIBUTE_LIST, b.optional(COMMA), RBRACKET); b.rule(ATTRIBUTE_TARGET_SPECIFIER).is(ATTRIBUTE_TARGET, COLON);
b.rule(SUITE).is(b.firstOf( b.sequence(NEWLINE, INDENT, b.oneOrMore(STATEMENT), DEDENT))); b.rule(STATEMENT).is(b.firstOf( b.sequence(b.oneOrMore(EXCEPT_CLAUSE, ":", SUITE), b.optional("else", ":", SUITE), b.optional("finally", ":", SUITE)), b.rule(FUN_RETURN_ANNOTATION).is("-", ">", TEST); b.rule(DECORATORS).is(b.oneOrMore(DECORATOR)); b.rule(DECORATOR).is("@", DOTTED_NAME, b.optional("(", b.optional(ARGLIST), ")"), NEWLINE); b.rule(DOTTED_NAME).is(NAME, b.zeroOrMore(".", NAME));
b.rule(SUITE).is(b.firstOf( b.sequence(NEWLINE, INDENT, b.oneOrMore(STATEMENT), DEDENT))); b.rule(STATEMENT).is(b.firstOf( b.sequence(b.oneOrMore(EXCEPT_CLAUSE, ":", SUITE), b.optional("else", ":", SUITE), b.optional("finally", ":", SUITE)), b.rule(FUN_RETURN_ANNOTATION).is("-", ">", TEST); b.rule(DECORATORS).is(b.oneOrMore(DECORATOR)); b.rule(DECORATOR).is("@", DOTTED_NAME, b.optional("(", b.optional(ARGLIST), ")"), NEWLINE); b.rule(DOTTED_NAME).is(NAME, b.zeroOrMore(".", NAME));
b.rule(TYPE_ARGUMENT_LIST).is(INFERIOR, TYPE_ARGUMENT, b.zeroOrMore(COMMA, TYPE_ARGUMENT), SUPERIOR); b.rule(TYPE_ARGUMENT).is(TYPE); b.rule(TYPE_PARAMETER_CONSTRAINTS_CLAUSES).is(b.oneOrMore(TYPE_PARAMETER_CONSTRAINTS_CLAUSE)); b.rule(TYPE_PARAMETER_CONSTRAINTS_CLAUSE).is("where", TYPE_PARAMETER, COLON, TYPE_PARAMETER_CONSTRAINTS); b.rule(TYPE_PARAMETER_CONSTRAINTS).is(
b.sequence(">>", TEST, b.optional(b.oneOrMore(",", TEST), b.optional(","))), b.optional(TEST, b.zeroOrMore(",", TEST), b.optional(",")))); b.rule(IMPORT_FROM).is("from", b.firstOf(b.sequence(b.zeroOrMore("."), DOTTED_NAME), b.oneOrMore(".")), "import", b.firstOf("*", b.sequence("(", IMPORT_AS_NAMES, ")"), IMPORT_AS_NAMES)); b.rule(IMPORT_AS_NAME).is(NAME, b.optional("as", NAME));
b.sequence(">>", TEST, b.optional(b.oneOrMore(",", TEST), b.optional(","))), b.optional(TEST, b.zeroOrMore(",", TEST), b.optional(",")))); b.rule(IMPORT_FROM).is("from", b.firstOf(b.sequence(b.zeroOrMore("."), DOTTED_NAME), b.oneOrMore(".")), "import", b.firstOf("*", b.sequence("(", IMPORT_AS_NAMES, ")"), IMPORT_AS_NAMES)); b.rule(IMPORT_AS_NAME).is(NAME, b.optional("as", NAME));
b.sequence(">>", TEST, b.optional(b.oneOrMore(",", TEST), b.optional(","))), b.optional(TEST, b.zeroOrMore(",", TEST), b.optional(",")))); b.rule(IMPORT_FROM).is("from", b.firstOf(b.sequence(b.zeroOrMore("."), DOTTED_NAME), b.oneOrMore(".")), "import", b.firstOf("*", b.sequence("(", IMPORT_AS_NAMES, ")"), IMPORT_AS_NAMES)); b.rule(IMPORT_AS_NAME).is(NAME, b.optional("as", NAME));
b.rule(SUITE).is(b.firstOf( b.sequence(NEWLINE, INDENT, b.oneOrMore(STATEMENT), DEDENT))); b.rule(STATEMENT).is(b.firstOf( b.rule(FUN_RETURN_ANNOTATION).is("-", ">", TEST); b.rule(DECORATORS).is(b.oneOrMore(DECORATOR)); b.rule(DECORATOR).is("@", DOTTED_NAME, b.optional("(", b.optional(ARGLIST), ")"), NEWLINE); b.rule(DOTTED_NAME).is(NAME, b.zeroOrMore(".", NAME));
b.rule(FIXED_SIZE_BUFFER_DECLARATION).is( b.optional(ATTRIBUTES), b.zeroOrMore(FIXED_SIZE_BUFFER_MODIFIER), FIXED, TYPE, b.oneOrMore(FIXED_SIZE_BUFFER_DECLARATOR), SEMICOLON); b.rule(FIXED_SIZE_BUFFER_MODIFIER).is( b.firstOf(
b.rule(RANK_SPECIFIERS).is(b.oneOrMore(RANK_SPECIFIER));
NAME, PythonTokenType.NUMBER, b.oneOrMore(PythonTokenType.STRING), ELLIPSIS, PythonKeyword.NONE));