fixed actions in lexer

[git-p4: depot-paths = "//depot/code/antlr4/main/": change = 6893]
This commit is contained in:
parrt 2010-05-25 10:12:38 -08:00
parent f32056f978
commit 38ef035c06
2 changed files with 25 additions and 21 deletions

View File

@ -300,7 +300,7 @@ import org.antlr.runtime.*;
<lexer> <lexer>
>> >>
Lexer(lexerName, modes, pdas, tokens, actions, sempreds) ::= << Lexer(lexerName, modes, pdas, tokens, actions, sempreds, namedActions) ::= <<
public class <lexerName> extends Lexer { public class <lexerName> extends Lexer {
<tokens.keys:{k | public static final int <k>=<tokens.(k)>;}; separator="\n"> <tokens.keys:{k | public static final int <k>=<tokens.(k)>;}; separator="\n">
<modes:{m| public static final int <m> = <i0>;}; separator="\n"> <modes:{m| public static final int <m> = <i0>;}; separator="\n">
@ -310,27 +310,27 @@ public class <lexerName> extends Lexer {
} }
public <lexerName>(CharStream input, LexerSharedState state) { public <lexerName>(CharStream input, LexerSharedState state) {
super(input,state); super(input,state);
modeToPDA = new PDA[] { <modes:{m | new <m>_PDA()}; separator=", "> };
} }
public String getGrammarFileName() { return "<fileName>"; } public String getGrammarFileName() { return "<fileName>"; }
<namedActions.members>
<actions> <actions>
<sempreds> <sempreds>
<pdas> <pdas>
static {
modeToPDA = new PDA[] { <modes:{m | new <m>_PDA()}; separator=", "> };
}
} }
>> >>
PDA(name, model, actions, sempreds) ::= << PDA(name, model, actions, sempreds) ::= <<
public static final class <name>_PDA extends PDA { public static final byte[] <name>_code = {
public static final byte[] code = { <model.code; separator=", ">
<model.code; separator=", "> };
}; public static final int[] <name>_tokenTypeToAddr = {
public static final int[] tokenTypeToAddr = { <model.tokenTypeToAddr; separator=", ">
<model.tokenTypeToAddr; separator=", "> };
};
public final class <name>_PDA extends PDA {
<if(actions)> <if(actions)>
public void action(int r, int a) { public void action(int r, int a) {
<actions:{a | <actions:{a |
@ -350,9 +350,9 @@ public static final class <name>_PDA extends PDA {
} }
<endif> <endif>
public <name>_PDA() { public <name>_PDA() {
super(code, tokenTypeToAddr, <model.nLabels>); super(<name>_code, <name>_tokenTypeToAddr, <model.nLabels>);
} }
} }<\n>
>> >>
actionMethod(name, actions) ::= << actionMethod(name, actions) ::= <<

View File

@ -4,6 +4,7 @@ import org.antlr.runtime.Token;
import org.antlr.v4.tool.LexerGrammar; import org.antlr.v4.tool.LexerGrammar;
import org.antlr.v4.tool.Rule; import org.antlr.v4.tool.Rule;
import org.stringtemplate.v4.ST; import org.stringtemplate.v4.ST;
import org.stringtemplate.v4.misc.Misc;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Set; import java.util.Set;
@ -31,7 +32,7 @@ public class LexerFactory {
ST actionST = gen.templates.getInstanceOf("actionMethod"); ST actionST = gen.templates.getInstanceOf("actionMethod");
actionST.add("name", r.name); actionST.add("name", r.name);
for (Token t : actionTokens) { for (Token t : actionTokens) {
actionST.add("actions", t.getText()); actionST.add("actions", Misc.strip(t.getText(),1));
} }
pdaST.add("actions", actionST); pdaST.add("actions", actionST);
lexerST.add("actions", actionST); lexerST.add("actions", actionST);
@ -49,13 +50,16 @@ public class LexerFactory {
pdaST.add("name", modeName); pdaST.add("name", modeName);
pdaST.add("model", pda); pdaST.add("model", pda);
lexerST.add("pdas", pdaST); lexerST.add("pdas", pdaST);
LinkedHashMap<String,Integer> tokens = new LinkedHashMap<String,Integer>();
for (String t : gen.g.tokenNameToTypeMap.keySet()) {
Integer ttype = gen.g.tokenNameToTypeMap.get(t);
if ( ttype>0 ) tokens.put(t, ttype);
}
lexerST.add("tokens", tokens);
} }
LinkedHashMap<String,Integer> tokens = new LinkedHashMap<String,Integer>();
for (String t : gen.g.tokenNameToTypeMap.keySet()) {
Integer ttype = gen.g.tokenNameToTypeMap.get(t);
if ( ttype>0 ) tokens.put(t, ttype);
}
lexerST.add("tokens", tokens);
lexerST.add("namedActions", gen.g.namedActions);
return fileST; return fileST;
} }
} }