diff options
author | Ben Gruver <bgruv@google.com> | 2015-03-01 13:26:25 -0800 |
---|---|---|
committer | Ben Gruver <bgruv@google.com> | 2015-03-04 20:56:53 -0800 |
commit | 06d108d791ea155c7ac7422f05e19c509b59788a (patch) | |
tree | ae80377a7e03ac5f7127f76f79888e04734299b7 /smali | |
parent | ff7172c68dfb070bb6993c17ad21ff1336db80ee (diff) | |
download | smali-06d108d791ea155c7ac7422f05e19c509b59788a.tar.gz |
Refactor how the PARAM_LIST_OR_ID thing is parsed
This gets rids of the empty placeholder tokens, which cause errors
in IDEA's built-in lexer support code
Diffstat (limited to 'smali')
-rw-r--r-- | smali/src/main/antlr3/smaliParser.g | 7 | ||||
-rw-r--r-- | smali/src/main/jflex/smaliLexer.flex | 8 | ||||
-rw-r--r-- | smali/src/test/resources/LexerTest/TypeAndIdentifierTest.tokens | 38 |
3 files changed, 23 insertions, 30 deletions
diff --git a/smali/src/main/antlr3/smaliParser.g b/smali/src/main/antlr3/smaliParser.g index 0e8c2aa4..bf84af43 100644 --- a/smali/src/main/antlr3/smaliParser.g +++ b/smali/src/main/antlr3/smaliParser.g @@ -131,8 +131,7 @@ tokens { PACKED_SWITCH_DIRECTIVE; PARAM_LIST_END; PARAM_LIST_START; - PARAM_LIST_OR_ID_END; - PARAM_LIST_OR_ID_START; + PARAM_LIST_OR_ID_PRIMITIVE_TYPE; PARAMETER_DIRECTIVE; POSITIVE_INTEGER_LITERAL; PRIMITIVE_TYPE; @@ -529,7 +528,7 @@ registers_directive }; param_list_or_id - : PARAM_LIST_OR_ID_START PRIMITIVE_TYPE+ PARAM_LIST_OR_ID_END; + : PARAM_LIST_OR_ID_PRIMITIVE_TYPE+; /*identifiers are much more general than most languages. Any of the below can either be the indicated type OR an identifier, depending on the context*/ @@ -584,7 +583,7 @@ method_prototype param_list : PARAM_LIST_START nonvoid_type_descriptor* PARAM_LIST_END -> nonvoid_type_descriptor* - | PARAM_LIST_OR_ID_START PRIMITIVE_TYPE* PARAM_LIST_OR_ID_END -> PRIMITIVE_TYPE* + | (PARAM_LIST_OR_ID_PRIMITIVE_TYPE -> PRIMITIVE_TYPE[$PARAM_LIST_OR_ID_PRIMITIVE_TYPE])+ | nonvoid_type_descriptor*; array_descriptor diff --git a/smali/src/main/jflex/smaliLexer.flex b/smali/src/main/jflex/smaliLexer.flex index 2849ab89..9c4a3c3a 100644 --- a/smali/src/main/jflex/smaliLexer.flex +++ b/smali/src/main/jflex/smaliLexer.flex @@ -307,9 +307,9 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayPrefix} ({ClassDescriptor} | } <PARAM_LIST_OR_ID> { - {PrimitiveType} { return newToken(PRIMITIVE_TYPE); } - [^] { yypushback(1); yybegin(YYINITIAL); return newToken(PARAM_LIST_OR_ID_END); } - <<EOF>> { yybegin(YYINITIAL); return newToken(PARAM_LIST_OR_ID_END); } + {PrimitiveType} { return newToken(PARAM_LIST_OR_ID_PRIMITIVE_TYPE); } + [^] { yypushback(1); yybegin(YYINITIAL); } + <<EOF>> { yybegin(YYINITIAL); } } <PARAM_LIST> { @@ -632,9 +632,9 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayPrefix} ({ClassDescriptor} | } {PrimitiveType} {PrimitiveType}+ { + // go back and re-lex it as a PARAM_LIST_OR_ID yypushback(yylength()); yybegin(PARAM_LIST_OR_ID); - return newToken(PARAM_LIST_OR_ID_START); } {Type} {Type}+ { diff --git a/smali/src/test/resources/LexerTest/TypeAndIdentifierTest.tokens b/smali/src/test/resources/LexerTest/TypeAndIdentifierTest.tokens index 03e79f03..0e850f4a 100644 --- a/smali/src/test/resources/LexerTest/TypeAndIdentifierTest.tokens +++ b/smali/src/test/resources/LexerTest/TypeAndIdentifierTest.tokens @@ -38,24 +38,20 @@ CLASS_DESCRIPTOR("LI/I/I;") ARRAY_TYPE_PREFIX("[[") PRIMITIVE_TYPE("I") -PARAM_LIST_OR_ID_START("") -PRIMITIVE_TYPE("I") -PRIMITIVE_TYPE("I") -PRIMITIVE_TYPE("I") -PRIMITIVE_TYPE("I") -PRIMITIVE_TYPE("I") -PARAM_LIST_OR_ID_END("") +PARAM_LIST_OR_ID_PRIMITIVE_TYPE("I") +PARAM_LIST_OR_ID_PRIMITIVE_TYPE("I") +PARAM_LIST_OR_ID_PRIMITIVE_TYPE("I") +PARAM_LIST_OR_ID_PRIMITIVE_TYPE("I") +PARAM_LIST_OR_ID_PRIMITIVE_TYPE("I") -PARAM_LIST_OR_ID_START("") -PRIMITIVE_TYPE("Z") -PRIMITIVE_TYPE("B") -PRIMITIVE_TYPE("S") -PRIMITIVE_TYPE("C") -PRIMITIVE_TYPE("I") -PRIMITIVE_TYPE("J") -PRIMITIVE_TYPE("F") -PRIMITIVE_TYPE("D") -PARAM_LIST_OR_ID_END("") +PARAM_LIST_OR_ID_PRIMITIVE_TYPE("Z") +PARAM_LIST_OR_ID_PRIMITIVE_TYPE("B") +PARAM_LIST_OR_ID_PRIMITIVE_TYPE("S") +PARAM_LIST_OR_ID_PRIMITIVE_TYPE("C") +PARAM_LIST_OR_ID_PRIMITIVE_TYPE("I") +PARAM_LIST_OR_ID_PRIMITIVE_TYPE("J") +PARAM_LIST_OR_ID_PRIMITIVE_TYPE("F") +PARAM_LIST_OR_ID_PRIMITIVE_TYPE("D") PARAM_LIST_START("") PRIMITIVE_TYPE("I") @@ -111,11 +107,9 @@ ARRAY_TYPE_PREFIX("[") INVALID_TOKEN(";") MEMBER_NAME("<linit>") -PARAM_LIST_OR_ID_START("") -PRIMITIVE_TYPE("I") -PRIMITIVE_TYPE("I") -PRIMITIVE_TYPE("I") -PARAM_LIST_OR_ID_END("") +PARAM_LIST_OR_ID_PRIMITIVE_TYPE("I") +PARAM_LIST_OR_ID_PRIMITIVE_TYPE("I") +PARAM_LIST_OR_ID_PRIMITIVE_TYPE("I") ARRAY_TYPE_PREFIX("[") PRIMITIVE_TYPE("I") |