Refactor how PARAM_LIST is parsed

This commit is contained in:
Ben Gruver 2015-03-01 14:28:53 -08:00
parent c5cf51ac69
commit 0f49330183
7 changed files with 10 additions and 31 deletions

View File

@ -129,8 +129,6 @@ tokens {
OPEN_BRACE;
OPEN_PAREN;
PACKED_SWITCH_DIRECTIVE;
PARAM_LIST_END;
PARAM_LIST_START;
PARAM_LIST_OR_ID_PRIMITIVE_TYPE;
PARAMETER_DIRECTIVE;
POSITIVE_INTEGER_LITERAL;
@ -582,8 +580,7 @@ method_prototype
-> ^(I_METHOD_PROTOTYPE[$start, "I_METHOD_PROTOTYPE"] ^(I_METHOD_RETURN_TYPE type_descriptor) param_list?);
param_list
: PARAM_LIST_START nonvoid_type_descriptor* PARAM_LIST_END -> nonvoid_type_descriptor*
| (PARAM_LIST_OR_ID_PRIMITIVE_TYPE -> PRIMITIVE_TYPE[$PARAM_LIST_OR_ID_PRIMITIVE_TYPE])+
: (PARAM_LIST_OR_ID_PRIMITIVE_TYPE -> PRIMITIVE_TYPE[$PARAM_LIST_OR_ID_PRIMITIVE_TYPE])+
| nonvoid_type_descriptor*;
array_descriptor

View File

@ -316,8 +316,8 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayPrefix} ({ClassDescriptor} |
{PrimitiveType} { return newToken(PRIMITIVE_TYPE); }
{ClassDescriptor} { return newToken(CLASS_DESCRIPTOR); }
{ArrayPrefix} { return newToken(ARRAY_TYPE_PREFIX); }
[^] { yypushback(1); yybegin(YYINITIAL); return newToken(PARAM_LIST_END); }
<<EOF>> { yybegin(YYINITIAL); return newToken(PARAM_LIST_END); }
[^] { yypushback(1); yybegin(YYINITIAL);}
<<EOF>> { yybegin(YYINITIAL);}
}
<STRING> {
@ -638,9 +638,9 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayPrefix} ({ClassDescriptor} |
}
{Type} {Type}+ {
// go back and re-lex it as a PARAM_LIST
yypushback(yylength());
yybegin(PARAM_LIST);
return newToken(PARAM_LIST_START);
}
{SimpleName} { return newToken(SIMPLE_NAME); }

View File

@ -554,13 +554,11 @@ METHOD_DIRECTIVE(".method")
ACCESS_SPEC("public")
SIMPLE_NAME("setCallForwardingOption")
OPEN_PAREN("(")
PARAM_LIST_START("")
PRIMITIVE_TYPE("I")
PRIMITIVE_TYPE("I")
CLASS_DESCRIPTOR("Ljava/lang/String;")
PRIMITIVE_TYPE("I")
CLASS_DESCRIPTOR("Landroid/os/Message;")
PARAM_LIST_END("")
CLOSE_PAREN(")")
VOID_TYPE("V")
REGISTERS_DIRECTIVE(".registers")
@ -705,12 +703,10 @@ CLASS_DESCRIPTOR("Lcom/android/internal/telephony/gsm/GSMPhone$MyHandler;")
ARROW("->")
SIMPLE_NAME("obtainMessage")
OPEN_PAREN("(")
PARAM_LIST_START("")
PRIMITIVE_TYPE("I")
PRIMITIVE_TYPE("I")
PRIMITIVE_TYPE("I")
CLASS_DESCRIPTOR("Ljava/lang/Object;")
PARAM_LIST_END("")
CLOSE_PAREN(")")
CLASS_DESCRIPTOR("Landroid/os/Message;")
INSTRUCTION_FORMAT11x("move-result-object")
@ -762,14 +758,12 @@ CLASS_DESCRIPTOR("Lcom/android/internal/telephony/CommandsInterface;")
ARROW("->")
SIMPLE_NAME("setCallForward")
OPEN_PAREN("(")
PARAM_LIST_START("")
PRIMITIVE_TYPE("I")
PRIMITIVE_TYPE("I")
PRIMITIVE_TYPE("I")
CLASS_DESCRIPTOR("Ljava/lang/String;")
PRIMITIVE_TYPE("I")
CLASS_DESCRIPTOR("Landroid/os/Message;")
PARAM_LIST_END("")
CLOSE_PAREN(")")
VOID_TYPE("V")
LINE_DIRECTIVE(".line")

View File

@ -53,42 +53,32 @@ 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")
CLASS_DESCRIPTOR("La;")
ARRAY_TYPE_PREFIX("[")
CLASS_DESCRIPTOR("La;")
ARRAY_TYPE_PREFIX("[")
PRIMITIVE_TYPE("I")
PARAM_LIST_END("")
PARAM_LIST_START("")
CLASS_DESCRIPTOR("Ljava/lang/String;")
CLASS_DESCRIPTOR("Ljava/lang/String;")
PARAM_LIST_END("")
PARAM_LIST_START("")
ARRAY_TYPE_PREFIX("[")
PRIMITIVE_TYPE("I")
ARRAY_TYPE_PREFIX("[")
PRIMITIVE_TYPE("I")
ARRAY_TYPE_PREFIX("[")
PRIMITIVE_TYPE("I")
PARAM_LIST_END("")
PARAM_LIST_START("")
ARRAY_TYPE_PREFIX("[")
PRIMITIVE_TYPE("I")
ARRAY_TYPE_PREFIX("[")
PRIMITIVE_TYPE("Z")
PARAM_LIST_END("")
PARAM_LIST_START("")
ARRAY_TYPE_PREFIX("[")
PRIMITIVE_TYPE("I")
ARRAY_TYPE_PREFIX("[")
CLASS_DESCRIPTOR("Ljava/lang/String;")
PARAM_LIST_END("")
MEMBER_NAME("<init>")
MEMBER_NAME("<clinit>")

View File

@ -477,8 +477,7 @@ colon
}
param_list_inner
: ((PARAM_LIST_START param* PARAM_LIST_END)
| (param+));
: param+;
catch [RecognitionException re] {
Marker errorMarker = mark();
recover(input, re);
@ -509,8 +508,7 @@ param_list_reference
@init {
Marker marker = mark();
}
: ((PARAM_LIST_START nonvoid_type_descriptor* PARAM_LIST_END)
| (nonvoid_type_descriptor)*)
: nonvoid_type_descriptor*
{ marker.done(SmaliElementTypes.METHOD_REFERENCE_PARAM_LIST); };
catch [RecognitionException re] {
recover(input, re);

View File

@ -141,8 +141,6 @@ public class SmaliTokens {
@SuppressWarnings({"UnusedDeclaration"}) public static IElementType OPEN_BRACE;
@SuppressWarnings({"UnusedDeclaration"}) public static IElementType OPEN_PAREN;
@SuppressWarnings({"UnusedDeclaration"}) public static IElementType PACKED_SWITCH_DIRECTIVE;
@SuppressWarnings({"UnusedDeclaration"}) public static IElementType PARAM_LIST_END;
@SuppressWarnings({"UnusedDeclaration"}) public static IElementType PARAM_LIST_START;
@SuppressWarnings({"UnusedDeclaration"}) public static IElementType PARAM_LIST_OR_ID_PRIMITIVE_TYPE;
@SuppressWarnings({"UnusedDeclaration"}) public static IElementType PARAMETER_DIRECTIVE;
@SuppressWarnings({"UnusedDeclaration"}) public static IElementType POSITIVE_INTEGER_LITERAL;
@ -261,9 +259,7 @@ public class SmaliTokens {
tokenColors.put("OPEN_BRACE", SmaliHighlightingColors.BRACES);
tokenColors.put("OPEN_PAREN", SmaliHighlightingColors.PARENS);
tokenColors.put("PACKED_SWITCH_DIRECTIVE", SmaliHighlightingColors.DIRECTIVE);
tokenColors.put("PARAM_LIST_END", SmaliHighlightingColors.TYPE);
tokenColors.put("PARAM_LIST_OR_ID_PRIMITIVE_TYPE", SmaliHighlightingColors.TYPE);
tokenColors.put("PARAM_LIST_START", SmaliHighlightingColors.TYPE);
tokenColors.put("PARAMETER_DIRECTIVE", SmaliHighlightingColors.DIRECTIVE);
tokenColors.put("POSITIVE_INTEGER_LITERAL", SmaliHighlightingColors.NUMBER);
tokenColors.put("PRIMITIVE_TYPE", SmaliHighlightingColors.TYPE);

View File

@ -43,6 +43,8 @@ smali.FILE
PsiWhiteSpace('\n')
PsiElement(MEMBER_NAME)
<empty list>
PsiElement(METHOD_REFERENCE_PARAM_LIST)
<empty list>
PsiElement(END_METHOD_DIRECTIVE)('.end method')
PsiWhiteSpace('\n\n')
SmaliMethod(METHOD)
@ -85,6 +87,8 @@ smali.FILE
PsiWhiteSpace('\n')
PsiElement(MEMBER_NAME)
<empty list>
PsiElement(METHOD_REFERENCE_PARAM_LIST)
<empty list>
PsiElement(END_METHOD_DIRECTIVE)('.end method')
PsiWhiteSpace('\n\n')
SmaliMethod(METHOD)