91
92 }
93
94 public static enum Keywords implements TokenType { 95 96 STRUCT("struct"), 97 INT("int"), VOID("void"), 98 RETURN("return"), IF("if"), ELSE("else"), WHILE("while"), 99 CONTINUE("continue"), BREAK("break");100101 private final String value;102103 private Keywords(String value) {104 this.value = value;105 }106107 @Override108 public String getName() {109 return name();110 }111112 @Override113 public String getValue() {114 return value;115 }116117 @Override118 public boolean hasToBeSkippedFromAst(AstNode node) {119 return false;120 }121122 public static String[] keywordValues() {123 var keywordsEnum = Keywords.values();124 var keywords = new String[keywordsEnum.length];125 for (int i = 0; i < keywords.length; i++) {126 keywords[i] = keywordsEnum[i].getValue();127 }128 return keywords;129 }130131 }132
133 public static Lexer create() {
134 return Lexer.builder()
58
59 }
60
61 public static enum Punctuators implements TokenType { 62 63 PAREN_L("("), PAREN_R(")"), 64 BRACE_L("{"), BRACE_R("}"), 65 EQ("="), COMMA(","), SEMICOLON(";"), 66 ADD("+"), SUB("-"), MUL("*"), DIV("/"), 67 EQEQ("=="), NE("!="), LT("<"), LTE("<="), GT(">"), GTE(">="), 68 INC("++"), DEC("--"), 69 HASH("#"); 70 71 private final String value; 72 73 private Punctuators(String value) { 74 this.value = value; 75 } 76 77 @Override 78 public String getName() { 79 return name(); 80 } 81 82 @Override 83 public String getValue() { 84 return value; 85 } 86 87 @Override 88 public boolean hasToBeSkippedFromAst(AstNode node) { 89 return false; 90 } 91 92 } 93
94 public static enum Keywords implements TokenType {
95
37 private MiniCLexer() {
38 }
39
40 public static enum Literals implements TokenType { 41 42 INTEGER; 43 44 @Override 45 public String getName() { 46 return name(); 47 } 48 49 @Override 50 public String getValue() { 51 return name(); 52 } 53 54 @Override 55 public boolean hasToBeSkippedFromAst(AstNode node) { 56 return false; 57 } 58 59 } 60
61 public static enum Punctuators implements TokenType {
62
58import org.sonar.cxx.sslr.grammar.GrammarRuleKey;
59import org.sonar.cxx.sslr.grammar.LexerfulGrammarBuilder;
60
61public enum MiniCGrammar implements GrammarRuleKey { 62 63 BIN_TYPE, 64 BIN_FUNCTION_DEFINITION, 65 BIN_PARAMETER, 66 BIN_VARIABLE_DEFINITION, 67 BIN_FUNCTION_REFERENCE, 68 BIN_VARIABLE_REFERENCE, 69 COMPILATION_UNIT, 70 DEFINITION, 71 STRUCT_DEFINITION, 72 STRUCT_MEMBER, 73 FUNCTION_DEFINITION, 74 VARIABLE_DEFINITION, 75 PARAMETERS_LIST, 76 PARAMETER_DECLARATION, 77 COMPOUND_STATEMENT, 78 VARIABLE_INITIALIZER, 79 ARGUMENT_EXPRESSION_LIST, 80 STATEMENT, 81 EXPRESSION_STATEMENT, 82 RETURN_STATEMENT, 83 CONTINUE_STATEMENT, 84 BREAK_STATEMENT, 85 IF_STATEMENT, 86 WHILE_STATEMENT, 87 CONDITION_CLAUSE, 88 ELSE_CLAUSE, 89 NO_COMPLEXITY_STATEMENT, 90 EXPRESSION, 91 ASSIGNMENT_EXPRESSION, 92 RELATIONAL_EXPRESSION, 93 RELATIONAL_OPERATOR, 94 ADDITIVE_EXPRESSION, 95 ADDITIVE_OPERATOR, 96 MULTIPLICATIVE_EXPRESSION, 97 MULTIPLICATIVE_OPERATOR, 98 UNARY_EXPRESSION, 99 UNARY_OPERATOR,100 POSTFIX_EXPRESSION,101 POSTFIX_OPERATOR,102 PRIMARY_EXPRESSION;103104 public static Grammar create() {105 var b = LexerfulGrammarBuilder.create();106107 // Bins108 b.rule(BIN_TYPE).is(b.firstOf(109 INT,110 VOID));111112 b.rule(BIN_PARAMETER).is(IDENTIFIER);113114 b.rule(BIN_FUNCTION_DEFINITION).is(IDENTIFIER);115116 b.rule(BIN_VARIABLE_DEFINITION).is(IDENTIFIER);117118 b.rule(BIN_FUNCTION_REFERENCE).is(IDENTIFIER);119120 b.rule(BIN_VARIABLE_REFERENCE).is(IDENTIFIER);121122 // Miscellaneous123 b.rule(COMPILATION_UNIT).is(b.zeroOrMore(DEFINITION), EOF);124125 b.rule(DEFINITION).is(b.firstOf(126 STRUCT_DEFINITION,127 FUNCTION_DEFINITION,128 VARIABLE_DEFINITION));129130 b.rule(STRUCT_DEFINITION).is(STRUCT, IDENTIFIER, BRACE_L, b.oneOrMore(STRUCT_MEMBER, SEMICOLON), BRACE_R);131132 b.rule(STRUCT_MEMBER).is(BIN_TYPE, IDENTIFIER);133134 b.rule(FUNCTION_DEFINITION).is(BIN_TYPE, BIN_FUNCTION_DEFINITION, PAREN_L, b.optional(PARAMETERS_LIST), PAREN_R,135 COMPOUND_STATEMENT);136137 b.rule(VARIABLE_DEFINITION).is(BIN_TYPE, BIN_VARIABLE_DEFINITION, b.optional(VARIABLE_INITIALIZER), SEMICOLON);138139 b.rule(PARAMETERS_LIST).is(PARAMETER_DECLARATION, b.zeroOrMore(COMMA, PARAMETER_DECLARATION));140141 b.rule(PARAMETER_DECLARATION).is(BIN_TYPE, BIN_PARAMETER);142143 b.rule(COMPOUND_STATEMENT).is(BRACE_L, b.zeroOrMore(VARIABLE_DEFINITION), b.zeroOrMore(STATEMENT), BRACE_R);144145 b.rule(VARIABLE_INITIALIZER).is(EQ, EXPRESSION);146147 b.rule(ARGUMENT_EXPRESSION_LIST).is(EXPRESSION, b.zeroOrMore(COMMA, EXPRESSION));148149 // Statements150 b.rule(STATEMENT).is(b.firstOf(151 EXPRESSION_STATEMENT,152 COMPOUND_STATEMENT,153 RETURN_STATEMENT,154 CONTINUE_STATEMENT,155 BREAK_STATEMENT,156 IF_STATEMENT,157 WHILE_STATEMENT,158 NO_COMPLEXITY_STATEMENT));159160 b.rule(EXPRESSION_STATEMENT).is(EXPRESSION, SEMICOLON);161162 b.rule(RETURN_STATEMENT).is(RETURN, EXPRESSION, SEMICOLON);163164 b.rule(CONTINUE_STATEMENT).is(CONTINUE, SEMICOLON);165166 b.rule(BREAK_STATEMENT).is(BREAK, SEMICOLON);167168 b.rule(IF_STATEMENT).is(IF, CONDITION_CLAUSE, STATEMENT, b.optional(ELSE_CLAUSE));169170 b.rule(WHILE_STATEMENT).is(WHILE, CONDITION_CLAUSE, STATEMENT);171172 b.rule(CONDITION_CLAUSE).is(PAREN_L, EXPRESSION, PAREN_R);173174 b.rule(ELSE_CLAUSE).is(ELSE, STATEMENT);175176 b.rule(NO_COMPLEXITY_STATEMENT).is("nocomplexity", STATEMENT);177178 // Expressions179 b.rule(EXPRESSION).is(ASSIGNMENT_EXPRESSION);180181 b.rule(ASSIGNMENT_EXPRESSION).is(RELATIONAL_EXPRESSION, b.optional(EQ, RELATIONAL_EXPRESSION)).skipIfOneChild();182183 b.rule(RELATIONAL_EXPRESSION).is(ADDITIVE_EXPRESSION, b.optional(RELATIONAL_OPERATOR, RELATIONAL_EXPRESSION))184 .skipIfOneChild();185186 b.rule(RELATIONAL_OPERATOR).is(b.firstOf(187 EQEQ,188 NE,189 LT,190 LTE,191 GT,192 GTE));193194 b.rule(ADDITIVE_EXPRESSION).is(MULTIPLICATIVE_EXPRESSION, b.optional(ADDITIVE_OPERATOR, ADDITIVE_EXPRESSION))195 .skipIfOneChild();196197 b.rule(ADDITIVE_OPERATOR).is(b.firstOf(198 ADD,199 SUB));200201 b.rule(MULTIPLICATIVE_EXPRESSION).is(UNARY_EXPRESSION, b202 .optional(MULTIPLICATIVE_OPERATOR, MULTIPLICATIVE_EXPRESSION)).skipIfOneChild();203204 b.rule(MULTIPLICATIVE_OPERATOR).is(b.firstOf(205 MUL,206 DIV));207208 b.rule(UNARY_EXPRESSION).is(b.firstOf(209 b.sequence(UNARY_OPERATOR, PRIMARY_EXPRESSION),210 POSTFIX_EXPRESSION)).skipIfOneChild();211212 b.rule(UNARY_OPERATOR).is(b.firstOf(213 INC,214 DEC));215216 b.rule(POSTFIX_EXPRESSION).is(b.firstOf(217 b.sequence(PRIMARY_EXPRESSION, POSTFIX_OPERATOR),218 b.sequence(BIN_FUNCTION_REFERENCE, PAREN_L, b.optional(ARGUMENT_EXPRESSION_LIST), PAREN_R),219 PRIMARY_EXPRESSION)).skipIfOneChild();220221 b.rule(POSTFIX_OPERATOR).is(b.firstOf(222 INC,223 DEC));224225 b.rule(PRIMARY_EXPRESSION).is(b.firstOf(226 INTEGER,227 BIN_VARIABLE_REFERENCE,228 b.sequence(PAREN_L, EXPRESSION, PAREN_R)));229230 b.setRootRule(COMPILATION_UNIT);231232 return b.build();233 }234235}
31
32public class Trivia {
33
34 public enum TriviaKind { 35 COMMENT, 36 PREPROCESSOR, 37 SKIPPED_TEXT 38 } 39
40 private final TriviaKind kind;
41 private final List<Token> tokens;
This declaration is not documented.
Consider adding a documentation comment to explain its functionality.
While it may seem like the functionality of this declaration is perfectly obvious, any consumers of your API or future maintainers may not be able to pick up on certain details.
In the example below, the meaning of AUIHighlight
may not be entirely clear, and questions such as what AUI
means may pop up.
public enum AUIHighlight {
LIGHT_BLUE(0x00ADD8E6),
DARK_BLUE(0x0000008B),
// ...
private int value;
AUIHighlight(int val) {
value = val;
}
}
Make sure to document any non-obvious details about any code element.
/**
* UI highlight color values for the action bar of the application.
*/
public enum AUIHighlight {
// ...
}