Sfoglia il codice sorgente

fix: G4ParserGenerated#validateTokenName
fix: G4ParserGenerated#tokenName
fix: NodeSupport (default qualifier)

Ranides Atterwim 1 anno fa
parent
commit
19fcad76c6

+ 12 - 11
assira.commons/src/main/java/net/ranides/assira/grammar/impl/G4ParserGenerated.java

@@ -19,7 +19,7 @@ import org.antlr.v4.runtime.CommonTokenStream;
 import org.antlr.v4.runtime.Lexer;
 import org.antlr.v4.runtime.Parser;
 import org.antlr.v4.runtime.ParserRuleContext;
-import org.antlr.v4.runtime.Token;
+import org.antlr.v4.runtime.Vocabulary;
 import org.antlr.v4.runtime.tree.RuleNode;
 import org.antlr.v4.runtime.tree.TerminalNode;
 
@@ -38,7 +38,9 @@ class G4ParserGenerated implements G4Parser {
 
     protected final G4ErrorHandler handler;
 
-    private final String[] lexerRules;
+    private final Vocabulary vocabulary;
+
+    private final Set<String> lexerRules;
 
     private final String[] parserRules;
 
@@ -49,8 +51,13 @@ class G4ParserGenerated implements G4Parser {
         this.parser = parser;
         this.handler = handler;
 
-        this.lexerRules = (String[])lexer.field("ruleNames").get().getStatic();
+        this.vocabulary = (Vocabulary)parser.field("VOCABULARY").get().getStatic();
         this.parserRules = (String[])parser.field("ruleNames").get().getStatic();
+        this.lexerRules = new OpenSet<>();
+
+        for(int i = 0, n = vocabulary.getMaxTokenType(); i<=n; i++) {
+            lexerRules.add(vocabulary.getSymbolicName(i));
+        }
 
         this.branchValidator = new OpenSet<>();
 
@@ -82,7 +89,7 @@ class G4ParserGenerated implements G4Parser {
 
     @Override
     public boolean validateTokenName(String tokenName) {
-        return Arrays.asList(lexerRules).contains(tokenName);
+        return lexerRules.contains(tokenName);
     }
 
     @Override
@@ -97,13 +104,7 @@ class G4ParserGenerated implements G4Parser {
 
     @Override
     public String tokenName(int tokenIndex) {
-        if(tokenIndex == Token.EOF) {
-            return "EOF";
-        }
-        if(tokenIndex <0 || tokenIndex>=lexerRules.length) {
-            return "?";
-        }
-        return lexerRules[tokenIndex-1];
+        return vocabulary.getSymbolicName(tokenIndex);
     }
 
     @Override

+ 1 - 1
assira.commons/src/main/java/net/ranides/assira/grammar/impl/NodeSupport.java

@@ -18,7 +18,7 @@ class NodeSupport  {
 
     public static final String QUALIFIER_NAME = "#";
     public static final String QUALIFIER_INDEX = "$";
-    public static final String QUALIFIER_INDEX_DEFAULT = "$0";
+    public static final String QUALIFIER_INDEX_DEFAULT = "$1";
 
     public static final String PARENT_SELECTOR = "..";
     public static final String LABEL_SELECTOR = "@";