Class ScopeParser

java.lang.Object
org.antlr.v4.parse.ScopeParser

public class ScopeParser extends Object
Parse args, return values, locals

rule[arg1, arg2, ..., argN] returns [ret1, ..., retN]

text is target language dependent. Java/C#/C/C++ would use "int i" but ruby/python would use "i". Languages with postfix types like Go, Swift use "x : T" notation or "T x".

  • Constructor Details

    • ScopeParser

      public ScopeParser()
  • Method Details

    • parseTypedArgList

      public static AttributeDict parseTypedArgList(@Nullable ActionAST action, String s, Grammar g)
      Given an arg or retval scope definition list like

      Map<String, String>, int[] j3, char *foo32[3]

      or

      int i=3, j=a[34]+20

      convert to an attribute scope.

    • parse

      public static AttributeDict parse(@Nullable ActionAST action, String s, char separator, Grammar g)
    • parseAttributeDef

      public static Attribute parseAttributeDef(@Nullable ActionAST action, @NotNull Tuple2<String,Integer> decl, Grammar g)
      For decls like "String foo" or "char *foo32[]" compute the ID and type declarations. Also handle "int x=3" and 'T t = new T("foo")' but if the separator is ',' you cannot use ',' in the initvalue unless you escape use "\," escape.
    • _parsePrefixDecl

      public static Tuple2<Integer,Integer> _parsePrefixDecl(Attribute attr, String decl, ActionAST a, Grammar g)
    • _parsePostfixDecl

      public static Tuple2<Integer,Integer> _parsePostfixDecl(Attribute attr, String decl, ActionAST a, Grammar g)
    • splitDecls

      public static List<Tuple2<String,Integer>> splitDecls(String s, int separatorChar)
      Given an argument list like

      x, (*a).foo(21,33), 3.2+1, '\n', "a,oo\nick", {bl, "fdkj"eck}, ["cat\n,", x, 43]

      convert to a list of attributes. Allow nested square brackets etc... Set separatorChar to ';' or ',' or whatever you want.

    • scanQuoted

      private static int scanQuoted(String text, int open, char quote)
      Advance past a quoted literal that opened at open. A backslash escapes the next character, including a quote and another backslash, so a literal that ends in \\ keeps its closer.
    • _splitArgumentList

      public static int _splitArgumentList(String actionText, int start, int targetChar, int separatorChar, List<Tuple2<String,Integer>> args)