Update to latest antlr3/string template

This commit is contained in:
Ben Gruver 2013-04-15 20:36:52 -07:00
parent 6c15046f2b
commit 0dceb148f3
5 changed files with 23 additions and 20 deletions

View File

@ -69,8 +69,8 @@ subprojects {
depends = [guava: 'com.google.guava:guava:14.0', depends = [guava: 'com.google.guava:guava:14.0',
findbugs: 'com.google.code.findbugs:jsr305:1.3.9', findbugs: 'com.google.code.findbugs:jsr305:1.3.9',
junit: 'junit:junit:4.6', junit: 'junit:junit:4.6',
antlr_runtime: 'org.antlr:antlr-runtime:3.2', antlr_runtime: 'org.antlr:antlr-runtime:3.5',
antlr: 'org.antlr:antlr:3.2', antlr: 'org.antlr:antlr:3.5',
commons_cli: 'commons-cli:commons-cli:1.2', commons_cli: 'commons-cli:commons-cli:1.2',
jflex: 'de.jflex:jflex:1.4.3', jflex: 'de.jflex:jflex:1.4.3',
proguard: 'net.sf.proguard:proguard-base:4.8' proguard: 'net.sf.proguard:proguard-base:4.8'

View File

@ -33,7 +33,7 @@ dependencies {
compile project(':util') compile project(':util')
compile 'com.google.code.findbugs:jsr305:1.3.9' compile 'com.google.code.findbugs:jsr305:1.3.9'
compile 'com.google.guava:guava:13.0.1' compile 'com.google.guava:guava:13.0.1'
compile 'org.antlr:stringtemplate:4.0.2' compile 'org.antlr:ST4:4.0.7'
testCompile 'junit:junit:4.6' testCompile 'junit:junit:4.6'
} }

View File

@ -255,7 +255,7 @@ literal returns[EncodedValue encodedValue]
| bool_literal { $encodedValue = ImmutableBooleanEncodedValue.forBoolean($bool_literal.value); } | bool_literal { $encodedValue = ImmutableBooleanEncodedValue.forBoolean($bool_literal.value); }
| NULL_LITERAL { $encodedValue = ImmutableNullEncodedValue.INSTANCE; } | NULL_LITERAL { $encodedValue = ImmutableNullEncodedValue.INSTANCE; }
| type_descriptor { $encodedValue = new ImmutableTypeEncodedValue($type_descriptor.type); } | type_descriptor { $encodedValue = new ImmutableTypeEncodedValue($type_descriptor.type); }
| array_literal { $encodedValue = new ImmutableArrayEncodedValue($array_literal.values); } | array_literal { $encodedValue = new ImmutableArrayEncodedValue($array_literal.elements); }
| subannotation { $encodedValue = new ImmutableAnnotationEncodedValue($subannotation.annotationType, $subannotation.elements); } | subannotation { $encodedValue = new ImmutableAnnotationEncodedValue($subannotation.annotationType, $subannotation.elements); }
| field_literal { $encodedValue = new ImmutableFieldEncodedValue($field_literal.value); } | field_literal { $encodedValue = new ImmutableFieldEncodedValue($field_literal.value); }
| method_literal { $encodedValue = new ImmutableMethodEncodedValue($method_literal.value); } | method_literal { $encodedValue = new ImmutableMethodEncodedValue($method_literal.value); }
@ -295,12 +295,12 @@ fixed_32bit_literal returns[int value]
| char_literal { $value = $char_literal.value; } | char_literal { $value = $char_literal.value; }
| bool_literal { $value = $bool_literal.value?1:0; }; | bool_literal { $value = $bool_literal.value?1:0; };
array_elements returns[List<byte[\]> values] array_elements returns[List<byte[\]> elements]
: {$values = new ArrayList<byte[]>();} : {$elements = Lists.newArrayList();}
^(I_ARRAY_ELEMENTS ^(I_ARRAY_ELEMENTS
(fixed_size_literal (fixed_size_literal
{ {
$values.add($fixed_size_literal.value); $elements.add($fixed_size_literal.value);
})*); })*);
packed_switch_elements[int baseAddress, int firstKey] returns[List<SwitchElement> elements] packed_switch_elements[int baseAddress, int firstKey] returns[List<SwitchElement> elements]
@ -1221,7 +1221,7 @@ insn_array_data_directive[int totalMethodRegisters, int methodParameterRegisters
// TODO: reimplement, after changing how it's parsed // TODO: reimplement, after changing how it's parsed
/* /*
int elementWidth = $short_integral_literal.value; int elementWidth = $short_integral_literal.value;
List<byte[]> byteValues = $array_elements.values; List<byte[]> byteValues = $array_elements.elements;
int length = 0; int length = 0;
for (byte[] byteValue: byteValues) { for (byte[] byteValue: byteValues) {
@ -1345,13 +1345,9 @@ string_literal returns[String value]
bool_literal returns[boolean value] bool_literal returns[boolean value]
: BOOL_LITERAL { $value = Boolean.parseBoolean($BOOL_LITERAL.text); }; : BOOL_LITERAL { $value = Boolean.parseBoolean($BOOL_LITERAL.text); };
array_literal returns[List<EncodedValue> values] array_literal returns[List<EncodedValue> elements]
: {ArrayList<EncodedValue> valuesList = new ArrayList<EncodedValue>();} : {$elements = Lists.newArrayList();}
^(I_ENCODED_ARRAY (literal {valuesList.add($literal.encodedValue);})*) ^(I_ENCODED_ARRAY (literal {$elements.add($literal.encodedValue);})*);
{
$values = valuesList;
};
annotations returns[Set<Annotation> annotations] annotations returns[Set<Annotation> annotations]
: {HashMap<String, Annotation> annotationMap = Maps.newHashMap();} : {HashMap<String, Annotation> annotationMap = Maps.newHashMap();}

View File

@ -45,7 +45,7 @@ import static org.jf.smali.smaliParser.*;
} }
catch (java.io.IOException e) { catch (java.io.IOException e) {
System.err.println("shouldn't happen: " + e.getMessage()); System.err.println("shouldn't happen: " + e.getMessage());
return Token.EOF_TOKEN; return newToken(EOF);
} }
} }

View File

@ -30,15 +30,21 @@ import org.antlr.runtime.ANTLRInputStream;
import org.antlr.runtime.CommonToken; import org.antlr.runtime.CommonToken;
import org.antlr.runtime.CommonTokenStream; import org.antlr.runtime.CommonTokenStream;
import org.antlr.runtime.RecognitionException; import org.antlr.runtime.RecognitionException;
import org.jf.smali.*; import org.jf.smali.expectedTokensTestGrammarLexer;
import static org.jf.smali.expectedTokensTestGrammarParser.ExpectedToken; import org.jf.smali.expectedTokensTestGrammarParser;
import org.jf.smali.smaliFlexLexer;
import org.jf.smali.smaliParser;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
import java.io.*; import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import static org.jf.smali.expectedTokensTestGrammarParser.ExpectedToken;
public class LexerTest { public class LexerTest {
private static final HashMap<String, Integer> tokenTypesByName; private static final HashMap<String, Integer> tokenTypesByName;
@ -157,11 +163,12 @@ public class LexerTest {
lexer.setSuppressErrors(true); lexer.setSuppressErrors(true);
CommonTokenStream tokenStream = new CommonTokenStream(lexer); CommonTokenStream tokenStream = new CommonTokenStream(lexer);
tokenStream.fill();
List tokens = tokenStream.getTokens(); List tokens = tokenStream.getTokens();
int expectedTokenIndex = 0; int expectedTokenIndex = 0;
CommonToken token; CommonToken token;
for (int i=0; i<tokens.size(); i++) { for (int i=0; i<tokens.size()-1; i++) {
token = (CommonToken)tokens.get(i); token = (CommonToken)tokens.get(i);
if (discardHiddenTokens && token.getChannel() == smaliParser.HIDDEN) { if (discardHiddenTokens && token.getChannel() == smaliParser.HIDDEN) {